18

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

$string = 'é';

if(preg_match('/^[\p{L}]+$/i', $string)){

    echo 'ok';

} else{

    echo 'nok';
}
4

2 回答 2

43

将 UTF-8修饰符标志( u ) 添加到您的表达式中:

/^\p{L}+$/ui

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

于 2012-07-25T11:50:54.790 回答
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 ...}

拒绝提交。

于 2020-04-01T16:29:42.573 回答