【发布时间】:2013-04-05 06:07:33
【问题描述】:
我有一个文本框,我可以在其中获取用户的姓氏。如何在正则表达式中只允许一个连字符 (-)?
^([a-z A-Z]*-){1}[a-z A-Z]*$
【问题讨论】:
-
您的正则表达式只允许一个连字符,那么您的问题是什么?
标签: regex
我有一个文本框,我可以在其中获取用户的姓氏。如何在正则表达式中只允许一个连字符 (-)?
^([a-z A-Z]*-){1}[a-z A-Z]*$
【问题讨论】:
标签: regex
您的正则表达式只允许一个-。但我假设您想要匹配“Smith”、“Smith-Kennedy”,而不是“Smith-”,为此您只需将连字符移到第二组:
^[a-z A-Z]+(-[a-z A-Z]+)?$
顺便说一句,在几乎所有使用* 的情况下+ 是更好的解决方案。
【讨论】:
^[a-zA-Z]+(-[a-zA-Z]+)?$。在这里测试:regex101.com/r/MYdavn/1
您可以使用否定前瞻来拒绝包含多个连字符的字符串:
^(?![^-]+-[^-]+-)[a-zA-Z- ]+$
Matched debuggex 上的演示。
Another Matched debuggex 上的演示。
Not Matched Demo debuggex 上的演示。
【讨论】:
【讨论】:
如果匹配.*-.*-,那么你有多个连字符,这样的字符串不应该被接受
【讨论】:
您的正则表达式的一个问题是它迫使用户输入-。您可以使用? 使其成为可选:
^[a-z A-Z]*\-?[a-zA-Z]*$
【讨论】: