为UTF-8的preg_match规则(preg_match rule for utf-8)

2019-10-17 15:18发布

什么pregmach规则,我必须使用FULL_NAME场?
我想用户输入唯一的字符,而不是间3〜11字符HTML或PHP代码值和空间
我可以用:

<?php
if (preg_match("%^[A-Za-z0-9-_]{3,10}$%", $_REQUEST['usr'])) {
//do something like 
mysql_query('insert into user(name) values(this field)');
//damn what is this for: It does not meet our quality standards.!!!
//i must insert more code? i dont have ! let me go !
}
else{
//do something else!
die('get out !:D');
}
?>

但与此用户输入斜面UTF-8字符,如“مسیحارسطوئی”
所以我必须使用什么样的preg_match规则为UTF-8?
或者,我可以用什么样的代码一样的preg_match?
I WANT用户只需能插入字符不<> {} []或$%^&*
3之间,以10个字符! 谢谢

Answer 1:

这将使“0”,COS مسیح ارسطوئی不仅含有3-10个字符;

$x = preg_match('~^([\pL]{3,10})$~u', 'مسیح ارسطوئی');
echo $x ? 1 : 0;

但是,这给你的情况的结果;

preg_match('~([\pL]+)~u', 'مسیح ارسطوئی', $m);
print_r($m);

Array
(
    [0] => مسیح
    [1] => مسیح
)

查看更多细节在这里: PHP:Unicode字符属性



Answer 2:

使用u修饰符是这样的:

preg_match('/pattern_with_unicode_symbols/u');

这个修饰符打开PCRE的附加功能与Perl不兼容。 模式字符串被视为UTF-8。

和使用 “\ X {2460}” 的语法来定义UTF-8字符



Answer 3:

preg_match_all('/#(\pL*)/u', 'this is #مثال text', $matches);
print_r($matches);

'U', '\ PL':字符串被视为UTF-8。



文章来源: preg_match rule for utf-8