我有一个文本框,我在其中获取用户的姓氏。如何在正则表达式中只允许一个连字符( - )?
^([a-z A-Z]*-){1}[a-z A-Z]*$
答案 0 :(得分:3)
您的正则表达式只允许一个-
。但我认为你想要马赫“史密斯”,“史密斯 - 肯尼迪”,而不是“史密斯 - ”,要做到这一点你必须将连字符移到第二组:
^[a-z A-Z]+(-[a-z A-Z]+)?$
BTW,几乎在所有使用*
的情况下+
都是更好的解决方案。
答案 1 :(得分:1)
您可以使用否定前瞻来拒绝具有多个连字符的字符串:
^(?![^-]+-[^-]+-)[a-zA-Z- ]+$
Matched演示。
关于debuggex的 关于debuggex的答案 2 :(得分:0)
正则表达式的一个问题是它强制用户放置-
。您可以使用?
将其设为可选:
^[a-z A-Z]*\-?[a-zA-Z]*$
答案 3 :(得分:0)
如果匹配.*-.*-
,则您有多个连字符,不应接受此类字符串
答案 4 :(得分:0)