2013-05-04 136 views
10

我試圖驗證我的字符串是否匹配模式。也就是說,完整的字符串可以寫成該模式。 但是preg_match返回true,如果有任何子字符串匹配該模式。 (如preg_match("#[a-z]*#, "333k")返回1,我不想。 在這個例子中,我寧願驗證,整個字符串只含有少量的拉丁字母。)PHP preg_match完整字符串

回答

13

您使用開始年底標記,^$,以指示正則表達式模式中字符串的開始和結束。這樣你可以使表達式只匹配整個字符串,而不是任何種類的子字符串。在你的情況下,它會再看看這樣的:

preg_match("#^[a-z]*$#", "333k"); 

還可以,有一個這些標記,指定該模式必須只匹配開頭或字符串的結尾。

+0

啊,感謝您的超級快速幫助,現在就開始工作。 – user2089648 2013-05-04 15:27:06

1

請注意,要將字符串匹配定位在字符串的開始和結尾處,您可能還要考慮使用\A\z定位點。

preg_match('~\A[a-z]*\z~', "333k"); 
      ^^  ^^ 

\A\z明確開始和PHP的正則表達式字符串錨端(如他們的行爲不依賴於任何正則表達式修飾符,即使你指定m MULTILINE修改,他們將繼續主張字符串開始/結束位置)。請參閱PHP documentation中有關PHP正則表達式錨點的更多信息。

謹防\Z雖然:\Z將在最後一個簡單的換行在之前的整個字符串匹配,而\z將只匹配在字符串的盡頭,那就是,有字符串中的所有字符後(見Whats the difference between \z and \Z in a regular expression and when and how do I use it?