PHP 正则表达式中的 UTF-8

2022-08-30 22:46:52

我需要有关正则表达式的帮助。我的字符串包含 Unicode 字符,下面的代码不起作用。

前四个字符必须是数字,然后是逗号,然后是任何字母字符或空格...我已经读过,如果我在常规exresion的末尾添加/ u,但它对我不起作用......

我的代码适用于非 Unicode 字符

$post = '9999,škofja loka';;
echo preg_match('/^[0-9]{4},[\s]*[a-zA-Z]+', $post);

感谢您的回答!


答案 1

更新的答案:
这现在已经测试并正常工作

$post = '9999, škofja loka';
echo preg_match('/^\\d{4},[\\s\\p{L}]+$/u', $post);

\\w将不起作用,因为它不包含所有 unicode 字母,并且还包含字母之外的字母。[0-9_]

重要的是激活 unicode 模式的修饰符。u

如果逗号后面可以有字母空格,那么你应该把它们放到同一个字符类中,在你的正则表达式中,逗号后面有0个或更多的空格,然后只有字母。

有关 php 正则表达式的详细信息,请参阅 http://www.regular-expressions.info/php.html

(Unicode 字母)在这里解释\\p{L}

同样重要的是使用字符串边界的末尾来确保真正验证完整的字符串,否则它将仅匹配第一个空格并忽略其余部分。$


答案 2

[a-zA-Z]将仅匹配 a-z 和 A-Z 范围内的字母。您有非 US-ASCII 字母,因此无论修饰符如何,您的正则表达式都不会匹配。您需要使用单词字符转义序列 ()。/u\w

$post = '9999,škofja loka';
echo preg_match('/^[0-9]{4},[\s]*[\w]+/u', $post);

推荐