首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于特定格式的全名的PHP Regex

用于特定格式的全名的PHP Regex
EN

Stack Overflow用户
提问于 2013-05-04 00:06:34
回答 3查看 960关注 0票数 0

我试图使用Regex在PHP上创建一个函数来验证名称,我希望名称能够携带无限数量的空格和‘和-,并且只允许在空格之后使用大写字符,但允许大写和大写在后面-和’。此外,总长度应为50个字符,名称应以小写结尾,请注意大写字母为A到Z,加上以下字符:

Œ,,r,,,r,r,

下面的大小写是a到z加上这些字符:

\x{e76f}\x{e76f}

每个单词(空格、‘或-和另一个之间)至少要计算2个字符--名称也应以大写开头,以小写结尾,在单词(空格之间)或--或

可接受名称的例子如下:

亚当·克尔斯尔德

亚当·奥茨克尔

亚当·德尔斯

土石坝

Addssd-Ddsdsd

我已经尝试了很多次,但是我最后一次尝试仍然保存在我的php文件中,其他的尝试我在失败的尝试中删除了(使用mb_ereg函数匹配,所以这是一个posix-ere):

代码语言:javascript
复制
([A-ZÙÒÌÈÀÁÉÍßÓÚÝÂÊÎÔÛÃÑÕÄÅÆŒÇÐØËÏÖÜŸ][a-zéçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß]+){1}((^[\'\-\s])[A-ZÙÒÌÈÀÁÉÍßÓÚÝÂÊÎÔÛÃÑÕÄÅÆŒÇÐØËÏÖÜŸ][a-zéçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß]+)*

(这不一定意味着这是最好的尝试,但我认为它可能会有所帮助,并给出一个想法,我有多傻。)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-04 00:27:26

我不建议你用这个..。但我觉得这能做你想做的?

代码语言:javascript
复制
^([A-ZÙÒÌÈÀÁÉÍßÓÚÝÂÊÎÔÛÃÑÕÄÅÆŒÇÐØËÏÖÜŸ][a-zéçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß]+){1}((([\s])[A-ZÙÒÌÈÀÁÉÍßÓÚÝÂÊÎÔÛÃÑÕÄÅÆŒÇÐØËÏÖÜŸ][a-zéçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß]+)|((['\-])([A-ZÙÒÌÈÀÁÉÍßÓÚÝÂÊÎÔÛÃÑÕÄÅÆŒÇÐØËÏÖÜŸ]|[a-zéçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß])[a-zéçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß]+))*$

它在一个非代码块里所以你可以看到它是多么的疯狂.不过,我认为它在这里删除了一些字符:

^(A-ZÙÒÌÈÀÁÉÍßÓÚÝÂÊÎÔÛÃÑÕÄÅÆŒÇÐØËÏÖÜŸ+){1}(((\s)A-ZÙÒÌÈÀÁÉÍßÓÚÝÂÊÎÔÛÃÑÕÄÅÆŒÇÐØËÏÖÜŸ+)|(('-)(A-ZÙÒÌÈÀÁÉÍßÓÚÝÂÊÎÔÛÃÑÕÄÅÆŒÇÐØËÏÖÜŸ|a-zéçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß)a-zéçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß+))*$

票数 1
EN

Stack Overflow用户

发布于 2013-05-04 00:25:40

这是Regex回答你需要检查的东西吗?

(当然,您必须在每个括号中添加奇怪的字符)。

票数 1
EN

Stack Overflow用户

发布于 2013-05-04 00:40:33

您可以使用它来避免重音字符问题:

代码语言:javascript
复制
$pattern = "~^[\p{Lu}ß]\p{Ll}*+(?>(?> [\p{Lu}ß]|['-]\p{L})\p{Ll}*+)*$~u";
if(preg_match($pattern, $name)) { ...

或者更具体的一组字符:

代码语言:javascript
复制
$pattern = "~(?(DEFINE)(?<Up>[A-ZÙÒÌÈÀÁÉÍßÓÚÝÂÊÎÔÛÃÑÕÄÅÆŒÇÐØËÏÖÜŸ]))
             (?(DEFINE)(?<Lo>[a-zéçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß]))
             ^\g<Up>\g<Lo>*+(?>(?>\h\g<Up>|['-]\g<Up>?+\g<Lo>)\g<Lo>*+)*+$~ux";

if (preg_match($pattern, $name, $matches)) { ...

或者用更短的方式:

代码语言:javascript
复制
$pattern = "~(?(DEFINE)(?<Up>[A-ZÀ-ÖØ-ݟߌ]))
             (?(DEFINE)(?<Lo>[a-zà-öø-ýÿßœ]))
             ^\g<Up>\g<Lo>*+(?>(?>\h\g<Up>|['-]\g<Up>?+\g<Lo>)\g<Lo>*+)*+$~ux";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16369259

复制
相关文章

相似问题

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