避免使用正则表达式组合连字符和空格

时间:2014-08-16 13:35:44

标签: ruby regex

我目前正在为firstname字段编写一个非常具体的正则表达式,它有几个要求。其中之一是在连字符之前或之后不允许使用空格。为此,我使用了一个负向前瞻:

(?!.*(\s\-))

作为正则表达式的一部分:

^(?!ß)(?!.*(\s\-))(?!(.)\1{2})(?!.*\s{2})(?!.*\'{2})(?!.*\-{2})[a-zA-ZßöüäÜÖÄ\s\-\']{2,30}(?<![\s\-])$

确实会导致不匹配:

asdf -asdf

但不适用于:

asdf- asdf

后者还需要返回错误。我错过了什么?

3 个答案:

答案 0 :(得分:0)

你必须在字符串中断言连字符和空格的其他组合:

(?!.*(\s\-))(?!.*(\-\s))

答案 1 :(得分:0)

您可以以更简单的方式重写您的模式,避免许多问题并使您的模式更有效,例如:

^(?=.{2,30}$)(?!(.)\1{2})[a-zA-ZöüäÜÖÄ]+(?:[-'\s][a-zA-ZßöüäÜÖÄ]+)*$

答案 2 :(得分:0)

最简单的可能是^:

之后的负面预测
/^(?!.*(\s-|-\s))#{main_pattern}/