有效名称不能只接受连字符

时间:2013-07-16 04:38:29

标签: regex

我在正则表达式中表现不佳,但我正在学习。目前我需要验证名称,我无法为其编写有效的正则表达式。有效名称仅包含字母或带有连字符或空格的字母。

有效名称的示例为

jones
jones-smiht
a loreal jones

但如果名称包含数字,则表示名称无效。以下正则表达式

^[-\\sa-zA-Z]+$工作正常,但只有-也被视为有效名称。

如何修改它以使有效名称必须包含字母,或者是否包含连字符和空格?

2 个答案:

答案 0 :(得分:2)

我认为你正在寻找这个正则表达式:

^[a-zA-Z][-\\sa-zA-Z]*$

这将确保您的名字始终以字母开头,而不是以连字符或空格开头。

注意:在Java中,您还可以使用(?i)进行忽略大小写并缩短正则表达式,如下所示:

(?i)^[a-z][-\\sa-z]*$

答案 1 :(得分:1)

您的字面答案为^[a-zA-Z][-\sa-zA-Z]*$

有更好的答案:例如,

([a-zA-Z]+)([-\s][a-zA-Z]+)*

允许以单个空格或短划线分隔的任意数量的单词,允许simon peyton-jones,但禁止像--jumbo-spaz--这样的愚蠢。

从我试图在已删除的答案上发布的回复中复制:

  

Regexp是单反斜杠。但是,由于regexp是用Java中的字符串构造的,因此需要转义反斜杠;但它是字符串的特征,而不是正则表达式。因此,regexp是\s,但您需要在Java中编写Pattern.compile("\\s")。并非所有语言都有这种扭曲,因此将字符串规则与Regexp分开是有用的。