我知道通常不会对姓氏进行验证(通过使用正则表达式)(除了空验证)。但是,我有不同的意见。
我制作了以下正则表达式:
^(?![^-]+-[^-]+-)[a-ząęłóźżćśńŃŻŹŁÓ'ĄĘ A-Z-]+$
它基本上拒绝特殊字符,并接受以我的母语存在的diactrics。
但是有一个特殊情况,这个正则表达式不起作用。
接受确定 - " Travolta-Smith"
接受确定 - " Travolta-Smith Jovi"
接受但不行 - "特拉沃尔塔 - 史密斯"
接受但不行 - " Travolta -Smith"
接受但不行 - "特拉沃尔塔 - 史密斯"
空格会导致问题,连字符旁边不应有任何空格。
你可以给我一些小提示吗?如何拒绝这种情况?我花了很多时间来定义这个正则表达式......
感谢您的回复。
答案 0 :(得分:0)
您可以为正则表达式添加另一个负向前瞻:
^(?!.*(?: -|- ))(?![^-]+-[^-]+-)[a-ząęłóźżćśńŃŻŹŁÓ'ĄĘ A-Z-]+$
^^^^^^^^^^^^^^^
请参阅regex demo
(?!.*(?: -|- ))
如果在换行符之外的任何0 +字符之后有一个空格,后跟-
或-
后跟空格,则^(?!.*(?: -|- ))[a-ząęłóźżćśńŃŻŹŁÓ'ĄĘ A-Z]+(?:-[a-ząęłóźżćśńŃŻŹŁÓ'ĄĘ A-Z]+)?$
将失败。
为了使正则表达式更有效率,如果消耗模式展开有点像
,则可以删除负向前瞻[a-ząęłóźżćśńŃŻŹŁÓ'ĄĘ A-Z]+
此处,-
匹配字符类中定义的1个字符(取出(?:-[a-ząęłóźżćśńŃŻŹŁÓ'ĄĘ A-Z]+)?
),然后-
匹配[a-ząęłóźżćśńŃŻŹŁÓ'ĄĘ A-Z]
的1或0次匹配,后跟1在-
字符类中定义的+字符。因此,字符串中只允许使用function myFunction() {
window.open('https://youtu.be/d9JWQcVrLpY', '_blank', 'location=no')
}
。