前端必会的String方法大全:字符串操作技巧与常见坑点解析
你造吗?新手写代码最常报的错是什么?TypeError!十次里有八次都是字符串操作惹的祸。上周还有个老弟问我:"为什么'2023-08-15'.split('-')能切成数组,但'Hello World'.split(' ')有时候会出幺蛾子?" 今天咱就把这些字符串操作的套路掰扯清楚,保准你看完再也不会被斜杠、空格和编码问题搞得头皮发麻!
一、基本操作三件套
??split、replace、indexOf??这三个方法必须刻进DNA里。举个栗子,处理用户输入的手机号:
javascript复制let phone = "138-1234-5678"; // 拆分成数组记得去掉横杠 let cleanArr = phone.split('-'); // ["138","1234","5678"] // 合并成纯数字 let pureNumber = cleanArr.join(''); // "13812345678"
这里有个坑:如果用户手抖多打了横杠,比如"138--1234",split会生成包含空字符串的数组。这时候就得用??filter??救场:
javascript复制phone.split('-').filter(item => item !== '')
二、截取字符串的修罗场
slice、substring、substr这三个长得像三胞胎的方法,新手绝对分不清。记住这个表格:
方法 | 参数含义 | 支持负数参数 |
---|---|---|
slice | (开始索引, 结束索引) | ?? |
substring | (开始索引, 结束索引) | ? |
substr | (开始索引, 截取长度) | ?? |
实战场景:截取身份证出生日期
javascript复制let idCard = "110101199003077856"; // 19900307 生日字段 console.log(idCard.slice(6, 14)); // 19900307 console.log(idCard.substring(6,14)); // 同上 console.log(idCard.substr(6,8)); // 19900307
但要是遇到负数索引,这三个就现原形了:
javascript复制let str = "ABCDEF"; str.slice(2, -1) // "CDE" str.substring(2,5) // "CDE" str.substr(-3,2) // "DE"
三、大小写转换的暗雷
toUpperCase和toLowerCase看着简单吧?但遇到土耳其语这类特殊语言就翻车。比如:
javascript复制"?".toUpperCase() // "?" (土耳其语) "?".toLowerCase() // "?"
解决方法是用??localeCompare??:
javascript复制str.toLocaleLowerCase('tr-TR')
不过日常开发中,建议所有涉及国际化的项目都统一用??toLocaleUpperCase()??和??toLocaleLowerCase()??
四、正则表达式的好基友
search和match这俩方法离了正则就是战五渣。比如验证密码强度:
javascript复制let password = "Abc123!@#"; // 必须包含大小写+数字+特殊符号 if(password.match(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[\W_]).{8,}$/)) { console.log("强密码"); }
但要注意:match返回的是数组或null,所以判断时得用:
javascript复制if(password.match(/正则/) !== null)
五、隐藏BOSS:trim家族
trim、trimStart、trimEnd这三个方法能救命!处理用户输入时:
javascript复制let input = " hello@example.com "; // 传统写法 input.trim() // "hello@example.com" // 现代写法 input.trimStart().trimEnd()
但遇到全角空格就歇菜了,这时候得上replace:
javascript复制input.replace(/^[\s\u3000]+|[\s\u3000]+$/g, '')
六、小编踩坑实录
有次做URL参数解析,用split('&')分割参数,结果遇到带&符号的base64数据直接崩了。后来改用??URLSearchParams??对象才解决:
javascript复制const params = new URLSearchParams('a=1&b=2&c=3') params.get('b') // "2"
所以重点来了:??处理复杂字符串优先考虑专用API,别死磕字符串方法??
最后说个冷知识:用??repeat??方法生成占位符超方便:
javascript复制console.log("0".repeat(10)) // "0000000000"
比写for循环优雅多了是不是?好了,赶紧打开控制台把这些方法都敲一遍,下次遇到字符串处理就能笑看同事抓耳挠腮啦!
本文由嘻道妙招独家原创,未经允许,严禁转载