如何用JavaScript正则表达式校验仅包含数字、*、#、+的字符串
正确实现方案
原有正则的问题
你编写的正则/^[\d]{1,}[*,#,+]{1,}$/存在两个核心错误:
- 逻辑上要求「数字全部在前,特殊符号全部在后」,无法匹配两类字符穿插出现的合法值
- 字符集内的逗号会被识别为允许匹配的字符,不符合你的规则要求
正则实现代码
// 校验函数 function checkValidStr(str) { // 正则含义:整个字符串只能由数字、*、#、+组成,长度至少为1 const validReg = /^[\d*#+]+$/ return validReg.test(str) }
测试效果
你提供的合法示例全部返回true:
checkValidStr('+182031203') // true checkValidStr('+12312312312*#') // true checkValidStr('+2131*1231#') // true checkValidStr('*12312+#') // true checkValidStr('#123*########') // true // 含非法字符的示例返回false checkValidStr('123a') // false checkValidStr('12-3') // false checkValidStr('') // false
正则参数说明
^匹配字符串的起始位置,避免前缀存在非法字符[\d*#+]匹配数字、*、#、+中的任意单个字符,字符集内无需添加逗号分隔+限定前面的匹配规则至少出现1次,避免空字符串通过校验$匹配字符串的结束位置,避免后缀存在非法字符
内容的提问来源于stack exchange,提问作者sonphung.xf
相关产品推荐
相关产品推荐

