检测字符串中的非英文字符?

时间:2019-12-05 01:50:02

标签: php ascii

我正在尝试删除描述中具有非英文字母的缓存配置文件。我可以使用破折号,符号,特殊字符,并强调所有我不想在字符串中使用外来字符的地方。

问题是,我下面的代码检测到á为ASCII的字符串,即使它不是英文字符,也可以正确地与ASCII匹配吗?

if (!mb_detect_encoding($this->removeEmojis(str_replace(" ", "", $cacheItem->description), 'ASCII', true)))
{
    $cacheItem->delete(); // laravel
}

$cacheItem->description的值

Welcome to my profile<br> Londrina-Paraná

字母á是非英语字符。

说明中还可以包含点,符号,特殊字符,但我想检测拉丁字符等外来字符。

说明中也可以包含表情符号,因此我尝试使用此功能将其删除

private function removeEmojis($text){
    // theres lots more inside the preg_replace I truncated it for readability
    return preg_replace('/[\x{1F3F4}](?:\x{E0067}\x{E0062}\x{E0077}\x{E006C}\x{E0073}\x{E007F})|[\x{1F3F4}]/u', ' ', $text);
}

2 个答案:

答案 0 :(得分:1)

通过使用此regexp,您可以检测到任何不可打印ASCII的字符

  

[^ \ x20- \ x7E]] *

See ASCII table

将匹配项替换为空字符串,然后得到一个纯净的字符串,然后可以应用表情符号替换。

答案 1 :(得分:1)

您可以使用preg_match来检查字符串中的所有字符是否都在ASCII字符范围<space>~范围内

$description = 'Welcome to my profile<br> Londrina-Paraná';
var_dump(preg_match('/^[ -~]*$/', $description));
$description = 'Welcome to my profile<br> Londriná-Parana';
var_dump(preg_match('/^[ -~]*$/', $description));
$description = 'Welcome to my profile<br> Londrina-Parana';
var_dump(preg_match('/^[ -~]*$/', $description));

输出:

int(0)
int(0)
int(1)

Demo on 3v4l.org