2015-07-21 44 views
0

我尝试验证名称字段,并且对于此字段,我希望允许最终用户添加任何内容,如Merianos Nikos,Μέριανος Νίκος(希腊语)或来自任何其他语言的字符具有相同的形式。正则表达式允许任何语言字符的全名形式,并以字母开头

形式是首字母大写,其余字母较低,至少有两个单词。

正确我有这个正则表达式/^([A-Z][a-z]*((\s)))+[A-Z][a-z]*$/与英语完美搭配,但与希腊语或其他语言无关。

最后,我想验证另一个字段的首字母大写,首字母大写,但是这个字段也可以包含单词后面的字符。

目前我使用followign regex /^[\s\w\.\-_]+$/的工作,但我又有希腊语和其他语言的问题。

+1

用什么语言来运行正则表达式? PHP还是JS? –

+0

两者。我使用JS作为前端,然后我使用PHP作为后端 –

+1

您是否有权访问JS中的XRegExp?你可以使用'XRegExp('^(\\ pLu \\ pLl * \\ s)+ \\ pLu \\ pLl * $');'。 –

回答

2

你可以通过使用Unicode Categories来做到这一点。因此,正则表达式^\p{Lu}\p{Ll}+(\p{Lu}\p{Ll}+)*$将匹配大写字母,后跟一个或多个小写字母,后跟0个或多个其他名称,由空格分隔。表达的一个例子如here所示。

关于你的第二点,你可以使用类似^\p{Lu}\p{Ll}*$的东西,它至少需要1个大写字母,后面跟0个或更多个小写字母。

上面的表达式假定您的姓名中没有引号,例如O'Brian或破折号Foo-bar。如果你想处理特定的希腊名字,并且你知道希腊名字中既没有引号也没有破折号,那么这应该不成问题。

通常只需确保提供的名称不是空的,而不是指定某种严格的形式。有关此事的更多信息,请参阅this问题。

+0

感谢您的回复。这看起来是迄今为止最好的解决方案。现在我遇到的问题是,给定的正则表达式不能用于JS。regex101.com,当我使用JS理解'\ p'作为文字,你有什么想法吗? –

+0

@MerianosNikos:[This](http://stackoverflow.com/questions/280712/javascript-unicode-regexes)可能会有所帮助。这就是说,我不会推荐你使用一个正则表达式来检查*有效*的名字 – npinti

+0

由于它们属于'Lo',所以不允许使用中文和日文字符,'Lt'中也有一些希腊字符 – nhahtdh

相关问题