我在正则表达式中只允许一个连字符( - )

时间:2013-04-05 06:07:34

标签: regex

我有一个文本框,我在其中获取用户的姓氏。如何在正则表达式中只允许一个连字符( - )?

^([a-z A-Z]*-){1}[a-z A-Z]*$

5 个答案:

答案 0 :(得分:3)

您的正则表达式只允许一个-。但我认为你想要马赫“史密斯”,“史密斯 - 肯尼迪”,而不是“史密斯 - ”,要做到这一点你必须将连字符移到第二组:

^[a-z A-Z]+(-[a-z A-Z]+)?$

BTW,几乎在所有使用*的情况下+都是更好的解决方案。

答案 1 :(得分:1)

您可以使用否定前瞻来拒绝具有多个连字符的字符串:

^(?![^-]+-[^-]+-)[a-zA-Z- ]+$

关于debuggex的

Matched演示。

关于debuggex的

Another Matched演示。

关于debuggex的

Not Matched Demo演示。

答案 2 :(得分:0)

正则表达式的一个问题是它强制用户放置-。您可以使用?将其设为可选:

^[a-z A-Z]*\-?[a-zA-Z]*$

答案 3 :(得分:0)

如果匹配.*-.*-,则您有多个连字符,不应接受此类字符串

答案 4 :(得分:0)

我假设您想要最多1个连字符。如果是这样,你想要的正则表达式是

^[a-z A-Z]*-?[a-z A-Z]*$

您可以在www.debuggex.com上将其可视化。