我需要知道這行代碼的作用,試圖找出它,因爲我必須用preg_match()構建它,但我完全不理解它:需要從ereg()切換到preg_match()
ereg("([0-9]{1,2}).([0-9]{1,2}).([0-9]{4})", $date)
我知道它檢查日期,但我不知道在哪個方式。
感謝您的幫助
我需要知道這行代碼的作用,試圖找出它,因爲我必須用preg_match()構建它,但我完全不理解它:需要從ereg()切換到preg_match()
ereg("([0-9]{1,2}).([0-9]{1,2}).([0-9]{4})", $date)
我知道它檢查日期,但我不知道在哪個方式。
感謝您的幫助
讓我們打破這:
([0-9]{1,2})
這到九查找數爲零(-
表示範圍在括號[]
使用時),並且可以有1個或兩個他們。
.
這看起來對任何單個字符
([0-9]{1,2})
這到九查找數爲零,可以有(再次)是1或兩個人
.
這看起來對於任何單個字符(再次)
([0-9]{4})
這到九查找數爲零,必須有他們的四連勝
所以它是尋找下列任何一種格式的日期:
更多,所以它不是一個非常咕將適合該模式d正則表達式它應該驗證什麼。有很多這種格式的matting日期樣例正則表達式模式,所以如果你谷歌它,你將有一個PCRE在任何時間。
看起來它在匹配中幾乎是不可知論的。
您可以將其解釋爲mm.dd.yyyy或dd.mm.yyyy。如果您實際上試圖匹配/驗證日期,我會考慮修改它,因爲00.00.0000可能是匹配項,但在可能的歷史背景之外是無效數據。
編輯:我忘了'。'在這種情況下可以匹配任何字符而不會逃脫。
它也會認爲00x00x0000是一個日期。 – Bart 2013-04-30 20:33:12
對。我想你得到最大的自由來按照你的方式輸入日期。 – asafreedman 2013-04-30 20:38:15
這是一個相對簡單的正則表達式(正則表達式)。如果你打算使用正則表達式,那麼我建議花一點時間來學習語法。一個好的學習起點是http://regular-expressions.info。
「正則表達式」或「正則表達式」是用於通過字符串搜索模式匹配的語言。有很多方言,大部分很相似,但有一些差異。PHP從ereg()
系列函數開始使用一種特定的方言,然後切換到preg_xx()
函數使用稍微不同的正則表達式方言。
這兩者在語法上有一些差異,這對學習有幫助,但它們相當小。事實上,對你而言,好消息是這兩種模式非常相似。
除了模式本身之外,您需要知道的唯一其他主要區別是preg_match()
中的模式必須在模式字符串的任一端都有一對定界字符。最常用的字符是斜線(/
)。
所以,你需要做的是交換ereg
爲preg_match
,和斜線添加到該模式的兩端:
$result = preg_match("/([0-9]{1,2}).([0-9]{1,2}).([0-9]{4})/", $date);
^ ^
slash here and here
它仍然會有助於獲取模式什麼的理解正在做,但爲了快速取勝,這可能是你在這種情況下需要做的所有事情。其他情況可能會更復雜,但大多數情況下會如此簡單。
請閱讀我之前鏈接過的regular-expressions.info網站;它會幫助你。
然而,我要補充的一件事是,這裏給出的模式實際上寫得很差。它打算匹配一個日期字符串,但會匹配很多它可能不想要的內容。
你可以通過尋找一個更好的正則表達式來匹配日期,但是很可能不需要regex就可以編寫代碼 - PHP內置了一些完美的日期處理功能。你需要考慮周圍的代碼,並明白它在做什麼,但它是完全有可能的是,整個事情可以像這樣的東西來代替:
真的很棒!感謝您的發佈。我會看看這個網站。 :) – emjay 2013-04-30 21:10:24
這個做同樣的,我只更換[0 -9]通過\ d,點(即匹配全部)由\ d(非數字,但可以通過\替換它。或[.-])
preg_match("~\d{2}\D\d{2}\D\d{4}~", $date)
謝謝,會嘗試。 :) – emjay 2013-04-30 21:08:08
0-9的一個或兩個數字,隨後按期。 0-9一個或兩個數字後加句點。 0-9 4位數字。 – 2013-04-30 20:23:38