我正在使用正则表达式来查看字符串中是否有一个非拉丁字符。
$latin_check = '/[\x{0030}-\x{007f}]/u'; //This is looking for only latin characters
if(preg_match($latin_check, $_POST['full_name'])) {
$error = true;
}
这应该检查是否存在至少一个不是拉丁字符的字符。如果它找不到至少一个非拉丁字符,则应将$ error设置为true。
我认为我的逻辑可能是错的。如何在php中使用正则表达式找到单个非拉丁字符的出现?
答案 0 :(得分:3)
你的正则表达式(据我所知)将匹配十六进制代码\ x0030和\ x007f之间的任何字符,这与你想要的相反。如果你想找到那个不在那个范围内的字符(即 - 非拉丁字符),我想你会想要使用一个否定的字符类:
$latin_check = '/[^\x{0030}-\x{007f}]/u';
正则表达式字符类中的“^”元字符基本上是指“不在此字符类中的任何字符”。
答案 1 :(得分:2)
以下内容应该有效:
if (preg_match('/[^\x30-\x7F]/', $_POST['full_name']) > 0)
{
$error = true;
}
如果您想接受空格和以下ASCII符号,则可能需要使用x20
而不是x30
作为下边界:!"#$%&'()*+,-./
。