如何检测字符串上的非数字或非字母?
KY4R5EHCN5W476XXO5ER - 返回true
KY4R5EHCN5W472X * @ * O5ER - 返回false
我知道答案是使用正则表达式,我只是不知道该怎么做。我吮吸正则表达式。任何帮助将不胜感激。
谢谢!
答案 0 :(得分:3)
if (preg_match('/[^A-Z0-9]/', $string)) {
... some char other than A-Z, 0-9 detected
}
答案 1 :(得分:3)
if (preg_match('/[^a-z0-9]/i', $subject)) {
// Invalid characters
} else {
// Only letters and numbers
}
答案 2 :(得分:1)
ctype_alnum()将比正则表达式快得多。
$str1 = 'KY4R5EHCN5W476XXO5ER';
$str2 = 'KY4R5EHCN5W472X*@*O5ER' ;
foreach (array($str1, $str2) as $str){
if (ctype_alnum($str)) {
echo "$str is alphanumeric\n" ;
}
else {
echo "$str is not just alphanumeric\n";
}
}
但是,请务必使用此处给出的正则表达式,因为这是一项非常有用的技能,特别是如果您以后决定还需要检查其他字符如破折号。在试验它们时,您会发现The Regex Coach非常有用。
$str = 'KY4R5EHCN5W476XXO5ER' ;
$ut = microtime(true) ;
for ($i = 0 ; $i < 100000; $i++) {
$res = ctype_alnum($str) ;
}
$utCtype = microtime(true) ;
for ($i = 0 ; $i < 100000; $i++) {
$res = preg_match('/[a-z0-9]/i', $str) ;
}
$utEnd = microtime(true) ;
$utDiffCtype = $utCtype - $ut ;
$utDiffPreg = $utEnd - $utCtype;
echo "ctype: $utDiffCtype, preg: $utDiffPreg" ;
答案 3 :(得分:0)
您可以使用:
if (preg_match('/^([a-z0-9]+)$/iu', $string))
{
// all alpha and digits
}
else
{
// not all alpha and digits
}
答案 4 :(得分:0)
(preg_match('/^[A-Z0-9]+$/', $string) == 0)
如果要包含小写字符,请更改为a-zA-Z0-9
如果字符串仅包含A-Z和0-9,则返回true。
或
(preg_match('/[^A-Z0-9]/', $string) != 0)
应该做的几乎相同。
答案 5 :(得分:0)
使用此正则表达式兼容unicode:
/^[\p{L}\p{N}]+$/u