我一直在与RegEx挣扎,所以请原谅我,如果这看起来像是一个解决我的问题的可怕方法.
当用户输入名字和姓氏时,我开始只使用基本,检查大小写,空格,撇号和连字符
if (!preg_match("/^[a-zA-Z\s'-]+$/", $name)) { // Error }
Run Code Online (Sandbox Code Playgroud)
现在我意识到这不是最好的,因为人们可以拥有如下的东西:马丁路德金博士(用逗号和全文).所以我认为通过改变它会使它更有效.
if (!preg_match("/^[a-zA-Z\s,.'-]+$/", $name)) { // Error }
Run Code Online (Sandbox Code Playgroud)
然后我在Facebook上看到了一个我知道的女孩名字,她把自己的名字写成了Siân,这让我想到了包含变音符号以及日语/中文/韩语/俄语字符的名字.所以我开始搜索并通过在其中写下每个字符来找到方法.
if (!preg_match("/^[a-zA-Z\sàáâäãåèéêëìíîïòóôöõøùúûüÿýñç?šžÀÁÂÄÃÅÈÉÊËÌÍÎÏÒÓÔÖÕØÙÚÛÜŸÝÑßÇŒÆ?ŠŽ?ð ,.'-]+$/u", $first_name)) { // Error }
Run Code Online (Sandbox Code Playgroud)
你可以想象,这是一个非常长的啰嗦,我很确定有一个更简单的RegEx可以实现这一目标.就像我说的那样,我已经四处寻找,但这是我能做的最好的事情.
那么,检查大小写字符,逗号,句号,撇号,大肆,变音符号,拉丁语,日语/俄语等的好方法是什么?
mar*_*rio 30
您可以使用Unicode字符类.\pL
几乎涵盖所有字母符号.
http://php.net/manual/en/regexp.reference.unicode.php
if (!preg_match("/^[a-zA-Z\s,.'-\pL]+$/u", $name))
Run Code Online (Sandbox Code Playgroud)
另请参见http://www.regular-expressions.info/unicode.html,但要注意PHP/PCRE只能理解缩写的类名.
\pL
已经包括a-z
和A-Z
,因此所提到的图案"/^[a-zA-Z\s,.'-\pL]+$/u"
可以简化为
"/^[\s,.'-\pL]+$/"
u
也不需要修饰符.
归档时间: |
|
查看次数: |
11179 次 |
最近记录: |