JS密码正则验证异常:含非法字符却通过,求正确正则表达式
问题分析与解决方法
你的错误在于原正则只检查字符串是否存在至少一个符合要求的字符,而不是所有字符都符合要求。
原正则/[a-zA-Z0-9!@#$%^&*]/g搭配test()时,只要字符串里有一个字符匹配(比如“фыва1”里的数字1),就会返回true,导致包含非法字符的字符串通过验证。
正确的正则表达式
需要用^(匹配字符串开头)和$(匹配字符串结尾)来限定整个范围,确保从开头到结尾的所有字符都属于允许的集合,同时用+表示至少有一个字符(避免空字符串通过):
const pattern = /^[a-zA-Z0-9!@#$%^&*]+$/;
修改后的代码
const pattern = /^[a-zA-Z0-9!@#$%^&*]+$/; if (!pattern.test(value)) { return 'ERROR'; }
这里不需要g标志,因为我们只需要验证整个字符串是否符合规则,不需要全局匹配。
内容的提问来源于stack exchange,提问作者Gridnev
相关产品推荐
相关产品推荐

