我试图使用Regex在PHP上创建一个函数来验证名称,我希望名称能够携带无限数量的空格和‘和-,并且只允许在空格之后使用大写字符,但允许大写和大写在后面-和’。此外,总长度应为50个字符,名称应以小写结尾,请注意大写字母为A到Z,加上以下字符:
Œ,,r,,,r,r,
下面的大小写是a到z加上这些字符:
\x{e76f}\x{e76f}
每个单词(空格、‘或-和另一个之间)至少要计算2个字符--名称也应以大写开头,以小写结尾,在单词(空格之间)或--或
可接受名称的例子如下:
亚当·克尔斯尔德
亚当·奥茨克尔
亚当·德尔斯
土石坝
Addssd-Ddsdsd
我已经尝试了很多次,但是我最后一次尝试仍然保存在我的php文件中,其他的尝试我在失败的尝试中删除了(使用mb_ereg函数匹配,所以这是一个posix-ere):
([A-ZÙÒÌÈÀÁÉÍßÓÚÝÂÊÎÔÛÃÑÕÄÅÆŒÇÐØËÏÖÜŸ][a-zéçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß]+){1}((^[\'\-\s])[A-ZÙÒÌÈÀÁÉÍßÓÚÝÂÊÎÔÛÃÑÕÄÅÆŒÇÐØËÏÖÜŸ][a-zéçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß]+)*(这不一定意味着这是最好的尝试,但我认为它可能会有所帮助,并给出一个想法,我有多傻。)
发布于 2013-05-04 00:27:26
我不建议你用这个..。但我觉得这能做你想做的?
^([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éçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß+))*$
发布于 2013-05-04 00:25:40
这是Regex回答你需要检查的东西吗?

(当然,您必须在每个括号中添加奇怪的字符)。
发布于 2013-05-04 00:40:33
您可以使用它来避免重音字符问题:
$pattern = "~^[\p{Lu}ß]\p{Ll}*+(?>(?> [\p{Lu}ß]|['-]\p{L})\p{Ll}*+)*$~u";
if(preg_match($pattern, $name)) { ...或者更具体的一组字符:
$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)) { ...或者用更短的方式:
$pattern = "~(?(DEFINE)(?<Up>[A-ZÀ-ÖØ-ݟߌ]))
(?(DEFINE)(?<Lo>[a-zà-öø-ýÿßœ]))
^\g<Up>\g<Lo>*+(?>(?>\h\g<Up>|['-]\g<Up>?+\g<Lo>)\g<Lo>*+)*+$~ux";https://stackoverflow.com/questions/16369259
复制相似问题