mb-trimwidth

A module of trim multibyte string by character width. This will work even if contained Unicode, emoji, and surrogate pairs.

Usage no npm install needed!

<script type="module">
  import mbTrimwidth from 'https://cdn.skypack.dev/mb-trimwidth';
</script>

README

mbTrimWidth

NPM version Build Status Coverage Status ISC License

A module of trim multibyte string by character width. This will work even if contained Unicode, emoji, and surrogate pairs.

install

$ npm install --save mb-trimwidth

usage

import { mbTrimWidth } from 'mb-trimwidth';

const str1 = 'I love ๐Ÿ„๐ŸŒŠ and ๐Ÿ•';
str1.length; // => 18

mbTrimWidth(str1, 9);
// => "I love ๐Ÿ„๐ŸŒŠ"

mbTrimWidth(str1, 9, 'โ€ฆ');
// => "I love ๐Ÿ„โ€ฆ"

const str2 = '๐ŸŒ•ใฎๅคœใฏ๐ ฎท้‡Žๅฑ‹ใง๐ฉธฝใ‚’้ฃŸในใŸใ„๐Ÿ˜‡';
str2.length; // => 19

mbTrimWidth(str2, 9);
// => "๐ŸŒ•ใฎๅคœใฏ๐ ฎท้‡Žๅฑ‹ใง๐ฉธฝ"

mbTrimWidth(str2, 9, 'โ€ฆ');
// => "๐ŸŒ•ใฎๅคœใฏ๐ ฎท้‡Žๅฑ‹ใงโ€ฆ"

Test

import { mbTrimWidth } from 'mb-trimwidth';

const str = 'Lorem ipsum dolor sit amet';
mbTrimWidth(str, 10);
// => "Lorem ipsu"
mbTrimWidth(str, 10, 'โ€ฆ');
// => "Lorem ipsโ€ฆ"
mbTrimWidth(str, 0);
// => ""
mbTrimWidth(str, 1, 'โ€ฆ');
// => "L"
mbTrimWidth(str, 1, '...');
// => "L"

const str = 'ๅญใ‚‚ใ‹ใฃใ“ใ†ใฎใ€ŒใŠใ˜ใŽ็Œซๅ›ฃใ€ใ‚’็ช“ใŒใตใฟๆˆธๆฃšใพใ—ใงใ™ใ€‚';
mbTrimWidth(str, 12);
// => "ๅญใ‚‚ใ‹ใฃใ“ใ†ใฎใ€ŒใŠใ˜ใŽ็Œซ"
mbTrimWidth(str, 12, 'โ€ฆ');
// => "ๅญใ‚‚ใ‹ใฃใ“ใ†ใฎใ€ŒใŠใ˜ใŽโ€ฆ"

const str = 'I love ๐Ÿ„๐ŸŒŠ and ๐Ÿ•';
mbTrimWidth(str, 9);
// => "I love ๐Ÿ„๐ŸŒŠ"
mbTrimWidth(str, 9, 'โ€ฆ');
// => "I love ๐Ÿ„โ€ฆ"

const str = '็งใฏ๐Ÿ„๐ŸŒŠใจ๐Ÿ•ใ‚’ใ—ใพใ™';
mbTrimWidth(str, 6);
// => "็งใฏ๐Ÿ„๐ŸŒŠใจ๐Ÿ•"
mbTrimWidth(str, 6, 'โ€ฆ');
// => "็งใฏ๐Ÿ„๐ŸŒŠใจโ€ฆ"

const str = '๐ŸŒ•ใฎๅคœใฏ๐ ฎท้‡Žๅฑ‹ใง๐ฉธฝใ‚’้ฃŸในใŸใ„๐Ÿ˜‡';
mbTrimWidth(str, 9);
// => "๐ŸŒ•ใฎๅคœใฏ๐ ฎท้‡Žๅฑ‹ใง๐ฉธฝ"
mbTrimWidth(str, 9, 'โ€ฆ');
// => "๐ŸŒ•ใฎๅคœใฏ๐ ฎท้‡Žๅฑ‹ใงโ€ฆ"