我正在尝试编写一个正则表达式,它可以匹配可能包含中文字符的字符串。例子:
hahdj5454_fd.fgg"
example.com/list.php?keyword=关键字
example.com/list.php?keyword=php
我正在使用这个表达式:
$matchStr = '/^[a-z 0-9~%.:_\-\/[^x7f-xff]+$/i';
$str = "http://example.com/list.php?keyword=关键字";
if ( ! preg_match($matchStr, $str)){
exit('WRONG');
}else{
echo "RIGHT";
}
它匹配像dasdsdsfds
或http://example.com/list.php
这样的普通英文字符串,但它与包含中文字符的字符串不匹配。我该如何解决这个问题?
答案 0 :(得分:2)
假设您要将此正则表达式匹配的字母集从ASCII扩展为所有Unicode字母,那么您可以使用
$matchStr = '#^[\pL 0-9~%.:_/-]+$#u';
我删除了[^x7f-xff
没有任何意义的部分(在你的正则表达式中,它会匹配一个开头括号,一个插入符号和一些{{1已覆盖的ASCII字符)该字符类的{}}和a-z
部分。)
答案 1 :(得分:0)
这有效:
$str = "http://mysite/list.php?keyword=关键字";
if (preg_match('/[\p{Han}]/simu', $str)) {
echo "Contains Chinese Characters";
}else{
exit('WRONG'); // Doesn't contains Chinese Characters
}