如何檢測字符串上的非數字或非字母?檢查字符串中是否有非字母和非數字
KY4R5EHCN5W476XXO5ER - 返回true
KY4R5EHCN5W472X * @ * O5ER - 返回false
我知道答案是使用正則表達式,我只是不知道如何做到這一點。我吮吸正則表達式。任何幫助將不勝感激。
謝謝!
如何檢測字符串上的非數字或非字母?檢查字符串中是否有非字母和非數字
KY4R5EHCN5W476XXO5ER - 返回true
KY4R5EHCN5W472X * @ * O5ER - 返回false
我知道答案是使用正則表達式,我只是不知道如何做到這一點。我吮吸正則表達式。任何幫助將不勝感激。
謝謝!
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" ;
if (preg_match('/[^A-Z0-9]/', $string)) {
... some char other than A-Z, 0-9 detected
}
if (preg_match('/[^a-z0-9]/i', $subject)) {
// Invalid characters
} else {
// Only letters and numbers
}
由於您在結尾處使用了'i',因此您可以將該類簡化爲「^ a-z0-9」。 –
好點,謝謝! – nickb
您可以使用此:
if (preg_match('/^([a-z0-9]+)$/iu', $string))
{
// all alpha and digits
}
else
{
// not all alpha and digits
}
完美!謝謝!也許我應該學習正則表達現在讓它變得很酷。再次感謝 –
@LeysamRosario很高興幫助你(就像每個回答你問題的人一樣) –
(preg_match('/^[A-Z0-9]+$/', $string) == 0)
改變A-ZA-Z0-9如果要包括小寫字符
,應返回如果屬實該字符串只包含AZ和0-9。
或
(preg_match('/[^A-Z0-9]/', $string) != 0)
應該做的幾乎是相同的。
使用此正則表達式是兼容Unicode:
/^[\p{L}\p{N}]+$/u
你所需要的'i'上月底,否則將無法獲得小寫字符。 –
或者只是在字符類中添加a-z。無論如何,OP的樣本中都沒有小寫字母。 –
是的,無論哪種方式將工作。在OP中,他只是說'檢測一個非數字或非字母',即使這個例子只有上限。 –