🙏废话不多说系列,直接开整🙏
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> 。
🙏至此,非常感谢阅读🙏