正则表达式匹配可能包含中文字符的字符串

时间:2013-03-13 10:23:04

标签: php regex

我正在尝试编写一个正则表达式,它可以匹配可能包含中文字符的字符串。例子:

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"; 
}

它匹配像dasdsdsfdshttp://example.com/list.php这样的普通英文字符串,但它与包含中文字符的字符串不匹配。我该如何解决这个问题?

2 个答案:

答案 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
}