我试图创建一个过滤器,允许用户只使用英文字母(小写和大写)和数字。我怎么能这么做?(ANSI) (不是试图消毒,只是为了判断一个字符串是否包含非英语字母),这个过滤器应该给我一个干净的数据库,只有英文用户名,没有多字节和UTF-8字符。
有人能向我解释一下为什么echo strlen输出'2‘吗?意思是两个字节对吧?UTF-8字符不应该包含一个字节吗?
谢谢
发布于 2015-10-02 16:50:11
这是如何检查字符串是否只包含英文字母中的字母。
if (!preg_match('/[^A-Za-z0-9]/', $string)) {
//string contains only letters from the English alphabet
}另一个问题是:
strlen(À)不会回来的。也许你是说
strlen('À')strlen返回
成功时字符串的长度,如果字符串为空,则为0。
取自这里。因此,该字符被解释为两个字符,可能是由于您的编码。
发布于 2015-10-02 16:44:54
您应该使用正则表达式来查看字符串是否与模式匹配。这个很简单:
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('À'));https://stackoverflow.com/questions/32911875
复制相似问题