「JavaScript 开发技巧」一时兴起:汇总分享下 JavaScript 针对字符串的操作开发经验

83 阅读4分钟

🙏废话不多说系列,直接开整🙏


1. byteSize:返回字符串的字节长度

相比日常大家都是通过 .length 来计算字符的长度的吧,接下来提供一个思路方法,你是否有想到过呢?思路:直接通过Blob对象封装字符串,再调用size即可

// 常规使用方法
'123'.length // 输出: 3

// 1.定义一个方法
const byteSize = str => new Blob([str]).size;
// 2.方法使用
byteSize(); // 9
byteSize('');// 0
byteSize('    '); // 4
byteSize(null); // 4
byteSize(undefined); // 9
byteSize('12'); // 2
byteSize('Hello World'); // 11

2. capitalize:单个单词首字母大写

在浏览器和内置的函数中,是没有提供首字母大写的函数的,所以,这里分享一下如何将字符串首字母大写的函数:思路1:截取收字符转换大写,再拼接后续的字符即可

// 第一步:定义一个转换首字母大写的函数,如下:
const capitalize = ([first, ...rest]) => first.toUpperCase() + rest.join('');
// 第二步:使用实例:
capitalize('fooBar'); // 'FooBar'
capitalize('fooBar', true); // 'Foobar'

3.capitalizeEveryWord:针对句子中的每个单词进行大写首字母转换

书接上文方法:这里提供一个针对整个句子或者一段文字中进行首字母大写转换,如果不提供此方法,哈哈,想必大家很可能是复用上述 的单个单词字母的方法进行转换,😁🤦‍♂️

const capitalizeEveryWord = str => str.replace(/\b[a-z]/g, char => char.toUpperCase());

capitalizeEveryWord('hello world!'); // 'Hello World!'

4. decapitalize 首字母小写

当然,字符串首字母有大写,当然有首字母小写咯,聪明的你,很厉害的就相当了只需要换成 小写的函数 toLowerCase() 即可。

  • ❓同理,是否你也能将整个全大写段落的首字母进行收字母小写呢? 😄(当然哈,实际业务中应该很小很小的概率会出现这种情形的哈)
  • ⬛️扩展:当然如果你想直接全大写段落进行小写转换,直接使用 toLowerCase() 即可。
  • ❓延伸话题:聪明的你,肯定知道 toLowerCase()toLocaleLowerCase() 方法的区别吧?
const decapitalize = ([first, ...rest]) => first.toLowerCase() + rest.join('')

decapitalize('FooBar'); // 'fooBar'
decapitalize('FooBar'); // 'fooBar'

5. luhnCheck 银行卡号码校验(luhn 算法)

Luhn 算法的实现,用于验证各种标识号,例如信用卡号,IMEI号,国家提供商标识号等。

String.prototype.split('') 结合使用,以获取数字数组。获得最后一个数字。实施luhn算法。如果被整除,则返回,否则返回

const luhnCheck = num => {
    let arr = (num + '')
        .split('')
        .reverse()
        .map(x => parseInt(x));
    let lastDigit = arr.splice(0, 1)[0];
    let sum = arr.reduce((acc, val, i) => (i % 2 !== 0 ? acc + val : acc + ((val * 2) % 9) || 9), 0);
    sum += lastDigit;
    return sum % 10 === 0;
};

// 测试用例
luhnCheck('4485275742308327'); // true
luhnCheck(6011329933655299); //  false
luhnCheck(123456789); // false

补充1:根据银行卡号得到银行卡类型以及其他公开信息(开源库:bankcardinfo

补充2:luhn算法

6. splitLines:将多行字符串拆分为行数组

  • 使用 String.prototype.split() 和正则表达式匹配换行符并创建一个数组。
const splitLines = str => str.split(/\r?\n/);

splitLines('This\nis a\nmultiline\nstring.\n'); // ['This', 'is a', 'multiline', 'string.' , '']

7. stripHTMLTags:删除字符串中的HTML标签

  • 从字符串中删除 HTML / XML标签。
  • 使用正则表达式从字符串中删除 HTML / XML 标记。
const stripHTMLTags = str => str.replace(/<[^>]*>/g, '');

stripHTMLTags('<p><em>lorem</em> <strong>ipsum</strong></p>'); // 'lorem ipsum'

8. 文本域textarea 内容长度限制实时显示

  • 💡思路分析:使用 JS 的onkeyup 事件来达到实时监听输入框中的字符文字,再进行统计 这里给出一个完整的实现案例,欢迎大家指正改进之处哈!
  • 💡思路拆解:定义一个可输入文本组件,再定义一个文字计数函数,通过配合 onkeyup 函数达到实时监听可输入文字的多少。
  • ❓延伸思考:你是否还有更好的思路原生的JavaScript实现这个功能?
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>JavaScript 基本小练习</title>
	</head>
	<body>
		<!-- 方法一:文本域内容字符限制长度输入 -->
		<textarea id="taContent" rows="3" maxlength="20" onchange="this.value=this.value.substring(0, 20)"
			onkeydown="this.value=this.value.substring(0, 20)" onkeyup="this.value=this.value.substring(0, 20)">
		</textarea>

		<hr>

		<!-- 方法二:文本域实时长度限制提示(兼容IE6) -->
		<textarea onkeyup="checkLen(this)"></textarea>
		<div>您还可以输入 <span id="count">3</span> 个文字</div>
		<script type="text/javascript">
			function checkLen(obj) {
				var maxChars = 3; //最多字符数
				if (obj.value.length > maxChars) obj.value = obj.value.substring(0, maxChars);
				var curr = maxChars - obj.value.length;
				document.getElementById("count").innerHTML = curr.toString();
			}
		</script>
	</body>
</html>

动态演示:比较常规的文本与输入是不支持 <textarea> 和 通过上述案例实现的可输入的文字计数限制的 <textarea>

textarea-limit.gif


🙏至此,非常感谢阅读🙏