我正在尝试创建一个过滤器,以允许用户只使用英文字母(小写和大写)和数字。我怎样才能做到这一点? (ANSI) (不是试图消毒,只是告诉一个字符串是否包含非英文字母) 该过滤器应该为我提供一个只有英文用户名的干净数据库,没有多字节和UTF-8字符。
任何人都可以向我解释为什么echo strlen(À)输出'2'?它意味着两个字节对吗?是不是UTF-8字符应该包含一个字节?
由于
答案 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。因此,该字符被解释为两个字符,可能是由于您的编码。