使用正则表达式验证欧洲名称

时间:2012-03-05 16:30:06

标签: ruby-on-rails ruby regex

我想要一个正则表达式来测试短语是否是正确的名称。它应该是:/^[\w\s\.]+$/

问题在于上面的正则表达式与“NoëlBurch”之类的名称不匹配,因为它包含'ë'字符。另一方面,我不能使用/^[\D]+$/,因为它会匹配“这是%而不是*名称”之类的短语。

是否有一个简单的正则表达式可以匹配常见的欧洲名称?

3 个答案:

答案 0 :(得分:2)

您可以检查以大写字母开头的通用词。所以名字为

someName = "Nicklos Frappapapopadopolos";

您可以使用正则表达式^\p{Lu}{1}\p{Ll}+\s+\p{Lu}{1}\p{Ll}+$,它假设只有第一个和第二个名称,并且每个名称都以大写字母开头。

但是,我不确定\p{Ll}是否适用于欧洲字符。

编辑:在得出正则表达式部分\p{Ll}与欧洲匹配之后,您现在可以扩展任意长名称的正则表达式,例如

someOtherNameI = "Victor PickPockaDopolas The Third"

与此匹配的ragex类似于^(\s?\p{Lu}\p{Ll}+\s?)+$。这匹配上述但不是

someOtherNameII = "Victor PickPockaDopolas The third"

这可能或许可能不是另一个问题。

答案 1 :(得分:2)

尝试执行以下操作:

^[\w{list of characters}\s.]+$

所以基本上,如果你有Emily Brontë这样的东西,应该只返回以下修改。

^[\w{ë}\s.]+$

如果您知道特定的语言环境,并且您的正则表达式支持语言环境,您应该能够将它们传入。通常传入UNICODE指令是这样的:

^[\w{L}\s.]+$

^[\w{UNICODE}\s.]+$

话虽这么说,使用\w仍然允许传入数字。这是否适用于您的情况?我的意思是Chad 85,他的名字是Chad Ochocinco

答案 2 :(得分:1)

考虑到名称中涉及的所有特殊字母,您可能最好检查不应出现的字符,如果他们误解了表单,人们可能会使用。这些将是:
- 数字
- 常见的标点符号:_ @ ,; :< > | + * /()[]! ? “#