我想要一个正则表达式,只允许字母,一个空格后的单词,和-只有它不会接受两个单词,但一个空格后的单词允许。任何其他特殊字符是不允许的。例如
John -> true John(space) -> true John-Doe -> true John-Doe(space) -> true (space)John -> false John Doe -> false
我正在试着用这个[a-zA-Z-][a-zA-Z -],但是不太好用。请帮忙。
tjvv9vkg1#
如果您不希望在模式中使用连续连字符--,可以将模式编写为:
--
^[A-Z][a-z]+ ?(?:-[A-Z][a-z]+ ?)?$
说明
^
[A-Z][a-z]+ ?
[A-Za-z]+
(?:-[A-Z][a-z]+ ?)?
-
$
请参阅regex demo如果要允许所有混合字符在末尾带有可选空格:
^[A-Za-z-]+ ?$
Regex demo
1条答案
按热度按时间tjvv9vkg1#
如果您不希望在模式中使用连续连字符
--
,可以将模式编写为:说明
^
字符串开头[A-Z][a-z]+ ?
匹配一个字符A-Z和1+个字符a-z,后跟一个可选空格(如果要允许混合字符,则为[A-Za-z]+
)(?:-[A-Z][a-z]+ ?)?
选择性地以前置-
比对与先前相同的模式$
字符串结束请参阅regex demo
如果要允许所有混合字符在末尾带有可选空格:
Regex demo