Php 正则表达式允许有限数量的UTF字符,即仅允许2、25个utf8字符

Php 正则表达式允许有限数量的UTF字符,即仅允许2、25个utf8字符,php,regex,Php,Regex,我需要一个php正则表达式,它应该允许所有语言的所有字符最少2个字符,最多25个字符。下面是我正在尝试的代码 $post = 'Sıhhiye-Ankara àl škofja loka is a long string '; preg_match('/[\p{L}]{2,25}/u', $post); 允许utf字符的正则表达式正确,但2,28的限制无效。您可以使用锚定^和$,它们将确保匹配从字符串的开头开始,在字符串的结尾结束: preg_match('/^\p{L}{2,25}$/u',

我需要一个php正则表达式,它应该允许所有语言的所有字符最少2个字符,最多25个字符。下面是我正在尝试的代码

$post = 'Sıhhiye-Ankara àl škofja loka is a long string ';
preg_match('/[\p{L}]{2,25}/u', $post);

允许utf字符的正则表达式正确,但2,28的限制无效。

您可以使用锚定
^
$
,它们将确保匹配从字符串的开头开始,在字符串的结尾结束:

preg_match('/^\p{L}{2,25}$/u', $post);
preg_match('/^\p{L}{2,25}$/u', $post);

这里有一个你需要使用锚的

。锚定有助于进行精确匹配<代码>^匹配行首,
$
匹配行尾边界


如果您想匹配一个要与另一个字符组合的字符(例如重音、元音、包围盒等),请添加
^$
锚定并使用
\p{M}

假设您只允许2-25个代码点,那么您对所有语言的
所有字符的定义是什么?在您的示例中,它应该允许像
-
这样的标点符号吗?如何组合标记、数字?我想允许用户输入长度至少为2个字符、最多为24个字符的字符串。我所说的“所有语言的所有字符”是指我想要接受utf-8字符。也允许使用标点符号和数字。对不起,我的问题让人困惑。谢谢
/^.{2,25}$/su
匹配Unicode中的所有字符,包括控制字符。感谢@nhahdh-/^.{2,25}$/su-这对我很有效。
preg_match('/^[\p{L}\p{M}]{2,25}$/u', $post);