Javascript 灾难性回溯错误验证字符串
^([a-zA-Z0-9]+[.-]?)+[a-zA-Z0-9]+$ 我使用上面的正则表达式对下面场景的输入字符串执行验证Javascript 灾难性回溯错误验证字符串,javascript,Javascript,^([a-zA-Z0-9]+[.-]?)+[a-zA-Z0-9]+$ 我使用上面的正则表达式对下面场景的输入字符串执行验证 我只允许连字符('-')、句点('.')和下划线(''.') 名称不应以连字符('-')、句点('.')和下划线(''开头或结尾 名称不应包含空格 不允许使用两个连续的特殊字符(来自(.-)集合) 我已经通过javascript验证了它 但是,当我们在末尾添加具有特殊字符的名称时,浏览器将停止/挂起,而不是返回false var regex = new RegExp("
- 我只允许连字符('-')、句点('.')和下划线(''.')
- 名称不应以连字符('-')、句点('.')和下划线(''开头或结尾
- 名称不应包含空格
- 不允许使用两个连续的特殊字符(来自(.-)集合)
var regex = new RegExp("^([a-zA-Z0-9]+[._-]?)+[a-zA-Z0-9]+$");
if (regex.test($('#txtBox1').val())) {//success}
不要在重复组中选择这些特殊分隔符:
^([a-zA-Z0-9]+[._-])*[a-zA-Z0-9]+$
# ^ ^
这仍然匹配相同的字符,但它不能回溯到在未显示的位置应用可选字符。也可以尝试此操作
var isValid = !!str.match(/[^\w.-]/i)
&& !str.split(/[._-]/).filter( s => s.length == 0 ).length;
解释
检查是否存在既不是字母数字,也不是下划线,也不是点状的字符匹配str.match(/[^\w.-]/i)
将输入拆分为这三个字符str.split(/[.\u-]/)
,然后检查是否有空字符串。如果这些字符位于开头、结尾或连续放置,则结果数组中将有一个空字符串[.\u-]
[a-zA-Z0-9]+
。_-]是第一个捕获组本身的一部分。谢谢。。。这对我有用。除此之外,我们还可以为整个字符串添加长度约束(最小、最大)