PHP-仅匹配unicode字母数字和标点符号
我有一个正则表达式:PHP-仅匹配unicode字母数字和标点符号,php,regex,unicode,Php,Regex,Unicode,我有一个正则表达式: '/^[\p{L}\p{Mn}\p{Pd}\'\x{2019}]+(\s+[\p{L}\p{Mn}\p{Pd}\'\x{2019}]+)*$/u' 目标:使用unicode字符(如“D'Agatti”或“María”等)匹配有效(姓)姓名(人名)。还必须包括一些特殊符号,如连字符 问题:它也在匹配数字 问题:如何避免匹配号码?我应该使用什么字符类?匹配名称的简单方法如下: '/^([^\d]*)$/u' 除了数字之外,这一切都匹配 然而,正如你所说,它的名字太宽泛了。您最
'/^[\p{L}\p{Mn}\p{Pd}\'\x{2019}]+(\s+[\p{L}\p{Mn}\p{Pd}\'\x{2019}]+)*$/u'
目标:使用unicode字符(如“D'Agatti”或“María”等)匹配有效(姓)姓名(人名)。还必须包括一些特殊符号,如连字符
问题:它也在匹配数字
问题:如何避免匹配号码?我应该使用什么字符类?匹配名称的简单方法如下:
'/^([^\d]*)$/u'
除了数字之外,这一切都匹配
然而,正如你所说,它的名字太宽泛了。您最终可以对原始测试的结果运行此测试,以删除带有数字的名称。对于名称来说,它太宽了,但我想我可以使用一个子项/\d+/(稍后)来检查(通过prev.regex)是否有效)名称有数字,并在该情况下引发错误。接受修改后的答案。@sshashank124您能帮我解决这个问题吗?这是类似的,但对于这个问题,数字是允许的,但是数字必须包含在它自己的术语中,而不是发现问题的其他(非数字)术语的一部分!最终,unicode没有问题,但DRUPAL没有调用处理程序,因为“它的名称太长”。说真的,Drupal糟透了。你的模式对我来说很好,也许问题出在其他地方。是的,是在其他地方。那是用DRUPAL写的。Drupal和它的无声错误raelly很差劲(是的,我在接受答案后就知道了,因为我在别处测试了答案:s)。事实上,drupal无论何时何地都很烂。这一次它截断了一个处理程序的名称(即使标识符长度不是PHP限制,我的处理程序名称显然“太长了”),所以我的实际处理程序从未被调用(甚至没有触发“函数不存在”!!!不得不施展印加魔法来看看发生了什么)。我同情你,祝你好运。