2011-11-02 134 views
0

如何檢測字符串上的非數字或非字母?檢查字符串中是否有非字母和非數字

KY4R5EHCN5W476XXO5ER - 返回true

KY4R5EHCN5W472X * @ * O5ER - 返回false

我知道答案是使用正則表達式,我只是不知道如何做到這一點。我吮吸正則表達式。任何幫助將不勝感激。

謝謝!

回答

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
if (preg_match('/[^A-Z0-9]/', $string)) { 
    ... some char other than A-Z, 0-9 detected 
} 
+1

你所需要的'i'上月底,否則將無法獲得小寫字符。 –

+0

或者只是在字符類中添加a-z。無論如何,OP的樣本中都沒有小寫字母。 –

+0

是的,無論哪種方式將工作。在OP中,他只是說'檢測一個非數字或非字母',即使這個例子只有上限。 –

3
if (preg_match('/[^a-z0-9]/i', $subject)) { 
    // Invalid characters 
} else { 
    // Only letters and numbers 
} 
+1

由於您在結尾處使用了'i',因此您可以將該類簡化爲「^ a-z0-9」。 –

+0

好點,謝謝! – nickb

0

您可以使用此:

if (preg_match('/^([a-z0-9]+)$/iu', $string)) 
{ 
    // all alpha and digits 
} 
else 
{ 
    // not all alpha and digits 
} 
+0

完美!謝謝!也許我應該學習正則表達現在讓它變得很酷。再次感謝 –

+0

@LeysamRosario很高興幫助你(就像每個回答你問題的人一樣) –

0
(preg_match('/^[A-Z0-9]+$/', $string) == 0) 

改變A-ZA-Z0-9如果要包括小寫字符

,應返回如果屬實該字符串只包含AZ和0-9。

(preg_match('/[^A-Z0-9]/', $string) != 0) 

應該做的幾乎是相同的。

0

使用此正則表達式是兼容Unicode:

/^[\p{L}\p{N}]+$/u 
相關問題