2011-09-21 24 views

回答

2

你使用了一種叫做負向預測 - 一種零寬度斷言。這意味着它會檢查字符串中的某些內容,而不會真正「吃」它中的任何一個,因此斷言之後的事物開始於斷言開始的位置。負向超前意味着如果找到字符串,則正則表達式無法匹配。你可以用(?!...)來做到這一點,其中「...」是你想要避免的佔位符。所以你的情況,要避免描述

$pattern = "/^(?!.*Description)[a-zA-Z0-9]{1,30}$/"; 

(?!.*Description),該.*一開始是有確保說明不會在任何地方都出現在字符串中(即任何說明並且它仍然會失敗,如果說明是在那裏的某個地方)。請記住,這是零寬度,所以在沒有描述之後,它會再次回到原來的位置,在這種情況下是字符串的最開始。

+0

我明白了 「?!」,但我不明白爲什麼。 「*」 是必要的。除此之外,它效果很好。 – Peter

+0

@Peter,這是必須的,因爲'^'意思是「在strnig的開始處錨定」,所以如果你只是做了'(?!Description)',它將只會失敗,如果字符串*開始*帶有Description。 –

+0

好吧,我現在明白了。謝謝你的解釋 – Peter

0

不要爲此使用正則表達式。

if(strpos($string,"Description") === false) { 
    // "Description" is NOT in the string 
} 
0

您可以使用strpos

if (false === strpos($string, "Description")) 
{ 
    // Description not found 
}