我目前正在为firstname字段编写一个非常具体的正则表达式,它有几个要求。其中之一是在连字符之前或之后不允许使用空格。为此,我使用了一个负向前瞻:
(?!.*(\s\-))
作为正则表达式的一部分:
^(?!ß)(?!.*(\s\-))(?!(.)\1{2})(?!.*\s{2})(?!.*\'{2})(?!.*\-{2})[a-zA-ZßöüäÜÖÄ\s\-\']{2,30}(?<![\s\-])$
确实会导致不匹配:
asdf -asdf
但不适用于:
asdf- asdf
后者还需要返回错误。我错过了什么?
答案 0 :(得分:0)
你必须在字符串中断言连字符和空格的其他组合:
(?!.*(\s\-))(?!.*(\-\s))
答案 1 :(得分:0)
您可以以更简单的方式重写您的模式,避免许多问题并使您的模式更有效,例如:
^(?=.{2,30}$)(?!(.)\1{2})[a-zA-ZöüäÜÖÄ]+(?:[-'\s][a-zA-ZßöüäÜÖÄ]+)*$
答案 2 :(得分:0)
最简单的可能是^:
之后的负面预测/^(?!.*(\s-|-\s))#{main_pattern}/