繁体   English   中英

如何使用正则表达式查找非拉丁字符的单次出现?

[英]How can I find a single occurrence of a non-latin character using regular expressions?

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

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

您的正则表达式(据我所知)将匹配十六进制代码\\ x0030和\\ x007f之间的任何字符,这与您想要的相反。 如果您要查找不在该范围内的字符(即-非拉丁字符),我想您想使用一个否定的字符类:

$latin_check = '/[^\x{0030}-\x{007f}]/u';

正则表达式字符类中的'^'元字符基本上表示“不在此字符类中的任何字符”。

以下应该工作:

if (preg_match('/[^\x30-\x7F]/', $_POST['full_name']) > 0)
{
    $error = true;
}

如果要接受空格和以下ASCII符号,则可能希望使用x20而不是x30作为下边界: !"#$%&'()*+,-./

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM