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。因此,该字符被解释为两个字符,可能是由于您的编码。
我正在尝试创建一个过滤器以允许用户仅使用英文字母(小写和大写)和数字。我怎样才能做到这一点? (美标) (不是试图清理,只是判断一个字符串是否包含非英文字母) 该过滤器应该给我一个干净的数据库,其中只有英文用户名,没有多字节和 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。因此,该字符被解释为两个字符,可能是由于您的编码。