我的正则表达式中的小变化验证了姓氏

时间:2017-01-25 11:31:43

标签: regex validation

我知道通常不会对姓氏进行验证(通过使用正则表达式)(除了空验证)。但是,我有不同的意见。

我制作了以下正则表达式:

^(?![^-]+-[^-]+-)[a-ząęłóźżćśńŃŻŹŁÓ'ĄĘ A-Z-]+$

它基本上拒绝特殊字符,并接受以我的母语存在的diactrics。

但是有一个特殊情况,这个正则表达式不起作用。

接受确定 - " Travolta-Smith"

接受确定 - " Travolta-Smith Jovi"

接受但不行 - "特拉沃尔塔 - 史密斯"

接受但不行 - " Travolta -Smith"

接受但不行 - "特拉沃尔塔 - 史密斯"

空格会导致问题,连字符旁边不应有任何空格。

你可以给我一些小提示吗?如何拒绝这种情况?

我花了很多时间来定义这个正则表达式......

感谢您的回复。

1 个答案:

答案 0 :(得分:0)

您可以为正则表达式添加另一个负向前瞻:

^(?!.*(?: -|- ))(?![^-]+-[^-]+-)[a-ząęłóźżćśńŃŻŹŁÓ'ĄĘ A-Z-]+$
 ^^^^^^^^^^^^^^^

请参阅regex demo

(?!.*(?: -|- ))如果在换行符之外的任何0 +字符之后有一个空格,后跟--后跟空格,则^(?!.*(?: -|- ))[a-ząęłóźżćśńŃŻŹŁÓ'ĄĘ A-Z]+(?:-[a-ząęłóźżćśńŃŻŹŁÓ'ĄĘ A-Z]+)?$ 将失败。

为了使正则表达式更有效率,如果消耗模式展开有点像

,则可以删除负向前瞻
[a-ząęłóźżćśńŃŻŹŁÓ'ĄĘ A-Z]+

请参阅this regex demo

此处,-匹配字符类中定义的1个字符(取出(?:-[a-ząęłóźżćśńŃŻŹŁÓ'ĄĘ A-Z]+)?),然后-匹配[a-ząęłóźżćśńŃŻŹŁÓ'ĄĘ A-Z]的1或0次匹配,后跟1在-字符类中定义的+字符。因此,字符串中只允许使用function myFunction() { window.open('https://youtu.be/d9JWQcVrLpY', '_blank', 'location=no') }