如何使用正则表达式找到单个非拉丁字符?

时间:2010-07-14 03:57:12

标签: php regex unicode ascii preg-match

我正在使用正则表达式来查看字符串中是否有一个非拉丁字符。

$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中使用正则表达式找到单个非拉丁字符的出现?

2 个答案:

答案 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作为下边界:!"#$%&'()*+,-./