preg_match包含国际字符和重音符号

时间:2012-07-25 11:48:47

标签: php preg-match non-ascii-characters

我想验证一个字符串,其中的图案只能包含字母(包括带重音的字母)。这是我使用的代码,它总是返回“nok”。 我不知道我做错了什么,你能帮忙吗?感谢

$string = 'é';

if(preg_match( '/^[\p{L}]+$/i', $string))
{
    echo 'ok';
} else{
    echo 'nok';
}

2 个答案:

答案 0 :(得分:28)

将UTF-8 modifier flag u )添加到您的表达式中:

/^\p{L}+$/ui

也不需要在字符类中包含\p{L}

答案 1 :(得分:1)

我不知道这是否对以后检查此问题/线程的人有帮助。下面的代码仅允许使用字母,重音和空格。没有符号或标点符号,如。,?/> [-<等。

<?php
$string = 'États unis and états unis';

if(preg_match('/^[a-zA-Z \p{L}]+$/ui', $string)){

echo 'ok';

} else{

echo 'nok';
}

?>

如果您也想添加数字,只需在Z之后立即添加0-9,例如a-zA-Z0-9

然后,如果您将其应用于表单验证,并且担心客户/用户可能只是按下空格键并提交,请使用:

if (trim($_POST['forminput']) == "") {... some error message ...}

拒绝提交。