首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在RegEx中接受国际名称字符

在RegEx中接受国际名称字符
EN

Stack Overflow用户
提问于 2011-11-05 02:10:47
回答 3查看 12.8K关注 0票数 10

我一直在与RegEx作斗争,所以请原谅我,如果这看起来是一个糟糕的方法来解决我的问题。

当用户输入名字和姓氏时,我开始只是使用基本的,检查大小写,空白,撇号和连字符

代码语言:javascript
复制
if (!preg_match("/^[a-zA-Z\s'-]+$/", $name)) { // Error }

现在我意识到这不是最好的,因为人们可能会有这样的东西:马丁·路德·金博士。(使用逗号和句号)。所以我假设把它改成这个会让它稍微更有效一点。

代码语言:javascript
复制
if (!preg_match("/^[a-zA-Z\s,.'-]+$/", $name)) { // Error }

然后,我在我的Facebook上看到了一个我知道的女孩名字,她的名字写成了斯安,这让我想到了包含变音的名字,以及日语/中文/韩语/俄语字符的名字。所以我开始搜索,并找到了方法,就像这样把这些字符写在里面。

代码语言:javascript
复制
if (!preg_match("/^[a-zA-Z\sàáâäãåèéêëìíîïòóôöõøùúûüÿýñçčšžÀÁÂÄÃÅÈÉÊËÌÍÎÏÒÓÔÖÕØÙÚÛÜŸÝÑßÇŒÆČŠŽ∂ð ,.'-]+$/u", $first_name)) { // Error }

正如您可以想象的那样,它是非常冗长的,我非常确定有一个更简单的RegEx可以实现这一点。就像我说的,我已经到处找过了,但这是我能做的最好的了。

那么,什么是检查大小写字符、逗号、句号、撇号、下划线、变音、拉丁语、日语/俄语等的好方法呢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-05 02:17:12

您可以使用Unicode字符类。\pL几乎涵盖了所有字母符号。

http://php.net/manual/en/regexp.reference.unicode.php

代码语言:javascript
复制
 if (!preg_match("/^[a-zA-Z\s,.'-\pL]+$/u", $name))

另请参阅http://www.regular-expressions.info/unicode.html,但请注意,PHP/PCRE只理解缩写的类名。

票数 31
EN

Stack Overflow用户

发布于 2013-06-25 18:20:52

\pL已经包含了a-zA-Z,因此前面提到的模式"/^[a-zA-Z\s,.'-\pL]+$/u"可以简化为

"/^[\s,.'-\pL]+$/"

此外,修饰符u也不是必需的。

票数 7
EN

Stack Overflow用户

发布于 2011-11-05 03:13:37

通过允许其他类型的标点符号,可能会有一些限制的放松。

有一件事应该是限制的,那就是至少需要一个字母。

if (!preg_match("/^[\s,.'-]*\p{L}[\p{L}\s,.'-]*$/u", $name))

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8013897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档