php 中只允许英文字母和数字

Allow only English letters and numbers in php

我正在尝试创建一个过滤器以允许用户仅使用英文字母(小写和大写)和数字。我怎样才能做到这一点? (美标) (不是试图清理,只是判断一个字符串是否包含非英文字母) 该过滤器应该给我一个干净的数据库,其中只有英文用户名,没有多字节和 UTF-8 字符。

谁能向我解释为什么 echo strlen(À) 输出“2”?这意味着两个字节对吗? UTF-8 字符不应该包含单个字节吗?

谢谢

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

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('À'));

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

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

另一个问题:

strlen(À)

不会 return 2. 也许你的意思是

strlen('À')

strlen returns

The length of the string on success, and 0 if the string is empty.

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