正则表达式:只匹配人名?

时间:2011-10-19 19:53:58

标签: regex

我对正则表达式不是很好,但我想只匹配一个人的名字。 因此,每个单词都需要包含至少一个元音,这样才有效。

我还想省略像<>()[]之类的奇怪字符。到目前为止我得到的是这样的:

([^<>\(\)\[\]\\\/@].+)

哪个匹配如下:

John Johnson

我不知道如何检查每个单词中是否有元音。

2 个答案:

答案 0 :(得分:3)

验证一个人的姓名通常只能验证他们提供的名称。试图确保它是一个真正的名称永远不是一个好主意,因为有人总会有一个不同规则的名称。

  1. 为第一个,最后一个和中间的首字母创建单独的字段。
  2. 如果您愿意,请确认他们没有数字。大多数人使用罗马数字表示他们是“III”或“IV”。我通常不愿意这样做。
  3. 除此之外,不再进行验证。为什么呢?

    1. 您会让潜在用户感到沮丧或沮丧。音译的粤语姓氏Ng非常受欢迎,并且没有任何元音。
    2. 名字一直在发明。
    3. 您的验证如何处理其他字符集,如西里尔字母?如果用户想要在其名称中使用这些内容,该怎么办?

答案 1 :(得分:0)

由于尝试验证名称是不可取的(出于已经提到的原因以及更多!),以下正则表达式应该按照您的要求执行(一系列字母和空格至少有一个元音):

(?=\b[a-zA-Z ]*?[aeiouAEIOU][a-zA-Z ]*\b)\b[a-zA-Z ]*\b

我可以为你分解,但我不建议使用它:D