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

时间:2017-12-11 12:47:17

标签: javascript

^([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}

2 个答案:

答案 0 :(得分:1)

不要在重复的群组中选择这些特殊的分隔符:

add-host               char *   Add the specified host to the list of
                                hosts known to this job and use it for
                                the associated process. This will be
                                used similarly to the -host option.

仍然匹配相同,但它无法回溯将可选字符应用于不显示的位置。

答案 1 :(得分:0)

试试这个

var isValid = !!str.match(/[^\w.-]/i) 
           && !str.split(/[._-]/).filter( s => s.length == 0 ).length;

<强>解释

  • str.match(/[^\w.-]/i)检查是否有任何字符匹配,既不是字母数字下划线也不是连字符

  • str.split(/[._-]/)按这三个字符[._-]拆分输入,然后检查是否有空字符串。如果这些字符位于开头结束连续放置,那么将会有一个空字符串结果数组。