检查字符串上是否有非字母和非数字

时间:2011-11-02 18:59:00

标签: php regex

如何检测字符串上的非数字或非字母?

KY4R5EHCN5W476XXO5ER - 返回true

KY4R5EHCN5W472X * @ * O5ER - 返回false

我知道答案是使用正则表达式,我只是不知道该怎么做。我吮吸正则表达式。任何帮助将不胜感激。

谢谢!

6 个答案:

答案 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