在PHP中只允许英文字母和数字

时间:2015-10-02 16:39:40

标签: php encoding utf-8 filter ansi

我正在尝试创建一个过滤器,以允许用户只使用英文字母(小写和大写)和数字。我怎样才能做到这一点? (ANSI) (不是试图消毒,只是告诉一个字符串是否包含非英文字母) 该过滤器应该为我提供一个只有英文用户名的干净数据库,没有多字节和UTF-8字符。

任何人都可以向我解释为什么echo strlen(À)输出'2'?它意味着两个字节对吗?是不是UTF-8字符应该包含一个字节?

由于

2 个答案:

答案 0 :(得分:3)

您应该使用正则表达式来查看字符串是否与模式匹配。这个很简单:

if (preg_match('/^[a-zA-Z0-9]+$/', $username)) {
    echo 'Username is valid';
} else {
    echo 'Username is NOT valid';
}

strlen('À')等于 2 的原因是strlen不知道该字符串是UTF-8。尝试使用:

echo strlen(utf8_decode('À'));

答案 1 :(得分:2)

这是检查字符串是否仅包含英文字母中的字母的方法。

if (!preg_match('/[^A-Za-z0-9]/', $string))  {
    //string contains only letters from the English alphabet
}

另一个问题:

strlen(À)

不会返回2.也许你的意思是

strlen('À')

strlen返回

  

成功时字符串的长度,如果字符串为空则为0。

取自here。因此,该字符被解释为两个字符,可能是由于您的编码。