代码之家  ›  专栏  ›  技术社区  ›  Manmeet S. Oberoi

全名的regex优化

  •  2
  • Manmeet S. Oberoi  · 技术社区  · 6 年前

    问题: 输入字段需要花费太多时间来验证输入。

    延误原因: 当有两个连续的空格时,正则表达式验证需要时间。

    Regex:

    '^(([A-Za-z]+[\-\' ]?)*([A-Za-z]+)?)+([A-Za-z]+[\-\' ]?)*([A-Za-z]+)?$'
    

    regex允许aphostrophe(“)和无限多的单词,只要 maxLength 输入的 < 128

    错误:

    [违规]“输入”处理程序占用26713ms

    1 回复  |  直到 6 年前
        1
  •  3
  •   mrzasa    6 年前

    你的嵌套重复导致 catastrophic backtracking :

    ([A-Za-z]+[\-\' ]?)*
    

    相反,你可以使用 unrolling the loop technique :

    [A-Za-z]+([\-\' ][A-Za-z]+)*
    

    我已经在 this blogpost

    另一个嵌套重复出现在:

    (([A-Za-z]+[\-\' ]?)*([A-Za-z]+)?)+
    

    您可以使用类似的技术来优化它。