当前位置: 首页 > 面试题库 >

在PCRE / PHP中匹配Unicode字母字符

江礼骞
2023-03-14
问题内容

我正在尝试为PHP中的名称编写一个合理的验证器,而我的第一次尝试包括以下模式:

// unicode letters, apostrophe, hyphen, space
$namePattern = "/^([\\p{L}'\\- ])+$/";

最终将其传递给的呼叫preg_match()。据我所知,这可以与您的原始ASCII字母一起使用,但似乎在诸如Ă或张之类的易变字符上起作用。

模式本身有问题吗?也许我期望\p{L}做的工作比我想象的还要多?

还是与输入的传递方式有关?我不确定是否相关,但是我确实确保在表单页面上指定UTF8编码。


问题答案:

我认为问题要比这简单得多:您忘记了指定u修饰符。Unicode字符属性仅在UTF-8模式下可用。

您的正则表达式应为:

// unicode letters, apostrophe, hyphen, space
$namePattern = '/^[-\' \p{L}]+$/u';


 类似资料:
  • 问题内容: 我有以下仅允许字母的正则表达式: 如何使用p {L}(通用-任何语言,例如德语,英语等)来执行此操作 我试过了 但所有字母a =“ aB”均返回null 问题答案: 从ECMAScript2018开始,JavaScript终于原生支持Unicode属性转义。 对于较旧的版本,您要么需要自己定义所有相关的Unicode范围。或者,您可以将StevenLevithan的程序包与Unicod

  • 问题内容: 在.net中,您可以使用它来匹配任何字母,如何在Python中进行匹配?即,我想匹配任何大写,小写和带重音的字母。 问题答案: Python的模块尚不支持Unicode属性。但是您可以使用该标志编译正则表达式,然后字符类速记也将与Unicode字母匹配。 由于还将匹配数字,因此您需要从字符类中减去数字以及下划线: 将匹配任何Unicode字母。

  • 问题内容: 我有一个要从中提取3组的字符串: 月名称可能包含非ASCII字符,因此对我不起作用: 我可以使用,但它匹配数字和下划线: 我尝试使用[:alpha:],但是不起作用: 如果我能以某种方式匹配而没有,但我不知道如何。即使我知道如何做到这一点,是否也有像Python中那样可用的现成快捷方式? 问题答案: 您可以构造一个新的角色类: 代替。翻译成英文,意思是“任何不是非字母数字字符(与相同)

  • 我试图验证一个字符串,它应该只包含字母、数字和特殊字符。为此,我尝试使用正则表达式。 在使用上述代码时,字符串是有效的。但我的要求是出示这个无效。ie每当出现字母、数字或特殊字符以外的字符时,字符串的计算结果应为无效。如何使用regex实现这一点?

  • 我试图找出我的字符串是否包含从a到z的所有字母 我们可以通过其他方法解决这个问题,但我正在尝试仅使用模式和匹配器来解决它。

  • 问题内容: 如何将一个字母字符与一个正则表达式匹配。我想要一个不在但不在的角色。我希望它与unicode兼容,这就是为什么我不能使用。 问题答案: 您的前两个句子相互矛盾。“在但不在”中包括下划线。我假设从您的第三句话开始,您不想下划线。 使用信封背面的维恩图会有所帮助。让我们看看我们不想要的: (1)不匹配的字符(即,不需要字母,数字或下划线的任何内容)=> (2)数字=> (3)下划线=> 所