【发布时间】:2013-05-04 00:06:34
【问题描述】:
我正在尝试创建一个函数来使用正则表达式验证 PHP 上的名称,我希望名称能够携带无限数量的空格和 ' 和 -,并且只允许空格后的大写字符,但允许大写和- 和 '. 之后没有大写字母。总长度应为 50 个字符,名称应以小写字母结尾,注意大写字母是 A 到 Z 加上这些字符:
ÙÒÌÈÀÁÉÍßÓÚÝÂÊÎÔÛÃÑÕÄÅÆŒÇÐØËÏÖÜŸ
小写字母是 a 到 z 加上这些字符:
éçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß
每个单词(在空格、' 或 - 和另一个之间)应至少包含 2 个字符 名称还应以大写字母开头并以小写字母结尾和单词(在空格、' 或 - 和另一个之间)不允许大写,但允许开头的大写
可接受的名称示例如下:
亚当·克尔斯德
亚当'odskdl
亚当'Ddlsl
Ùdam-ddkkdk
添加ssd-Ddsdsd
我已经尝试了很多,但这是我最后一次尝试,我仍然保留在我的 php 文件中,其他我在不成功尝试的混乱中删除了(使用 mb_ereg 函数匹配,所以这是一个 posix -ere):
([A-ZÙÒÌÈÀÁÉÍßÓÚÝÂÊÎÔÛÃÑÕÄÅÆŒÇÐØËÏÖÜŸ][a-zéçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß]+){1}((^[\'\-\s])[A-ZÙÒÌÈÀÁÉÍßÓÚÝÂÊÎÔÛÃÑÕÄÅÆŒÇÐØËÏÖÜŸ][a-zéçàèàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðøß]+)*
(这并不一定意味着这是最好的尝试,但我可能会有所帮助并让我知道我有多傻)
【问题讨论】:
-
不是解决方案,而是从字母只有 A-Z 的变体开始。那么模式还没有那么大。在它工作之后,很容易添加其他字母。并为自己创建一个测试脚本,您可以在其中针对一组您已经知道结果的字符串运行匹配函数。这样您就可以更快地测试并编写您的正则表达式。
-
像
Jim McSomething这样的名字呢?骆驼案绝对是存在于不太晦涩的名称中的东西。 -
IMO 最佳解决方案,不要验证名称,顺其自然。
-
你为什么要验证名字?顺便说一句,我听说
!xobile也是一个名字:| -
是的,验证名称是一场艰苦的战斗。有太多的变量需要解释。 @Ejay 提到的非洲名字 !xobile 就是一个很好的例子。如果您坚持至少对名称进行粗略检查(以便它们不仅仅是垃圾),那么请查看 Unicode characters,即
\pL以获取 Unicode 字母字符。