2

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

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

它匹配类似dasdsdsfdsor的纯英文字符串http://example.com/list.php,但不匹配包含中文字符的字符串。我该如何解决这个问题?

4

2 回答 2

2

假设您想将此正则表达式匹配的字母集从 ASCII 扩展到所有 Unicode 字母,那么您可以使用

$matchStr =  '#^[\pL 0-9~%.:_/-]+$#u';

我已经删除了[^x7f-xff没有任何意义的部分(在你的正则表达式中,它会匹配一个左括号、一个插入符号和一些已经被该字符类的a-zand0-9部分覆盖的 ASCII 字符)。

于 2013-03-13T10:49:44.353 回答
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
}
于 2013-12-27T10:25:46.320 回答