Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 灾难性回溯错误验证字符串_Javascript - Fatal编程技术网

Javascript 灾难性回溯错误验证字符串

Javascript 灾难性回溯错误验证字符串,javascript,Javascript,^([a-zA-Z0-9]+[.-]?)+[a-zA-Z0-9]+$ 我使用上面的正则表达式对下面场景的输入字符串执行验证 我只允许连字符('-')、句点('.')和下划线(''.') 名称不应以连字符('-')、句点('.')和下划线(''开头或结尾 名称不应包含空格 不允许使用两个连续的特殊字符(来自(.-)集合) 我已经通过javascript验证了它 但是,当我们在末尾添加具有特殊字符的名称时,浏览器将停止/挂起,而不是返回false var regex = new RegExp("

^([a-zA-Z0-9]+[.-]?)+[a-zA-Z0-9]+$

我使用上面的正则表达式对下面场景的输入字符串执行验证

  • 我只允许连字符('-')、句点('.')和下划线(''.')

  • 名称不应以连字符('-')、句点('.')和下划线(''开头或结尾

  • 名称不应包含空格

  • 不允许使用两个连续的特殊字符(来自(.-)集合)

我已经通过javascript验证了它

但是,当我们在末尾添加具有特殊字符的名称时,浏览器将停止/挂起,而不是返回false

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-]
    ,然后检查是否有空字符串。如果这些字符位于开头、结尾或连续放置,则结果数组中将有一个空字符串


我只允许连字符('-')、句点('.')和下划线(''.')SDGGQ6585555555555COM5JMDSFGSDGDSGDSDGGGGGGDSGCOM。@gurvinder372它们之间必须始终有
[a-zA-Z0-9]+
。_-]是第一个捕获组本身的一部分。谢谢。。。这对我有用。除此之外,我们还可以为整个字符串添加长度约束(最小、最大)