我一直在与RegEx作斗争,所以请原谅我,如果这看起来是一个糟糕的方法来解决我的问题。
当用户输入名字和姓氏时,我开始只是使用基本的,检查大小写,空白,撇号和连字符
if (!preg_match("/^[a-zA-Z\s'-]+$/", $name)) { // Error }
现在我意识到这不是最好的,因为人们可能会有这样的东西:马丁·路德·金博士。(使用逗号和句号)。所以我假设把它改成这个会让它稍微更有效一点。
if (!preg_match("/^[a-zA-Z\s,.'-]+$/", $name)) { // Error }
然后,我在我的Facebook上看到了一个我知道的女孩名字,她的名字写成了斯安,这让我想到了包含变音的名字,以及日语/中文/韩语/俄语字符的名字。所以我开始搜索,并找到了方法,就像这样把这些字符写在里面。
if (!preg_match("/^[a-zA-Z\sàáâäãåèéêëìíîïòóôöõøùúûüÿýñçčšžÀÁÂÄÃÅÈÉÊËÌÍÎÏÒÓÔÖÕØÙÚÛÜŸÝÑßÇŒÆČŠŽ∂ð ,.'-]+$/u", $first_name)) { // Error }
正如您可以想象的那样,它是非常冗长的,我非常确定有一个更简单的RegEx可以实现这一点。就像我说的,我已经到处找过了,但这是我能做的最好的了。
那么,什么是检查大小写字符、逗号、句号、撇号、下划线、变音、拉丁语、日语/俄语等的好方法呢
发布于 2011-11-05 02:17:12
您可以使用Unicode字符类。\pL
几乎涵盖了所有字母符号。
http://php.net/manual/en/regexp.reference.unicode.php
if (!preg_match("/^[a-zA-Z\s,.'-\pL]+$/u", $name))
另请参阅http://www.regular-expressions.info/unicode.html,但请注意,PHP/PCRE只理解缩写的类名。
发布于 2013-06-25 18:20:52
\pL
已经包含了a-z
和A-Z
,因此前面提到的模式"/^[a-zA-Z\s,.'-\pL]+$/u"
可以简化为
"/^[\s,.'-\pL]+$/"
此外,修饰符u
也不是必需的。
发布于 2011-11-05 03:13:37
通过允许其他类型的标点符号,可能会有一些限制的放松。
有一件事应该是限制的,那就是至少需要一个字母。
if (!preg_match("/^[\s,.'-]*\p{L}[\p{L}\s,.'-]*$/u", $name))
https://stackoverflow.com/questions/8013897
复制相似问题