2011-02-02 63 views
0

我使用這個字符串來驗證DD/MM/YYYY日期字段 '和' DD-MM-yyyy格式:日期驗證未知的修飾錯誤

'/^(0?[1-9]|[12][0-9]|3[01])[\/\.- ](0?[1-9]|1[0-2])[\/\.- ](19|20)\d{2}$/' 

,但我得到這個錯誤

警告:preg_match()[function.preg-match]:第102行/var/www/...fields_lib.php中的未知修飾符'\'

請記住上面的字符串是在Web上輸入的應用程序可選驗證表單字段沒有任何分隔符,因爲我認爲表單嵌入了delimeters本身。 對於其他驗證類型,如整數和十進制數字,我必須刪除驗證的驗證工作在這個特定的表格。

任何想法?

謝謝

回答

1

我沒有得到這個錯誤;相反,我得到一個‘範圍亂序’的錯誤,爲了得到另一個錯誤,我必須刪除字符類中的第一個反斜槓([/\.- ]而不是[\/\.- ]),然後它將/解釋爲正則表達式分隔符,並且它期望下一個字符是(如i對於不區分大小寫m對於多行

所以你有兩個問題:-被視爲範圍運算符,而/被視爲正則表達式分隔符。您可以通過用反斜槓(即[\/.\- ])轉義違規字符來處理這兩個問題,但每個問題都有一個更優雅的解決方案。如果您將-移至無法形成範圍的第一個或最後一個位置,則會將其視爲文字-。至於/,你可以使用其他的正則表達式分隔符。例如:

'~^(0?[1-9]|[12][0-9]|3[01])[/. -](0?[1-9]|1[0-2])[/. -](19|20)\d{2}$~' 

僅供參考,.根本不需要轉義。在字符類中,大多數正則表達式元字符失去了其特殊的含義。你碰巧碰到兩個特殊情況。 : -/

+0

用你發佈的字符串,它現在正在工作,它正在驗證該字段。 非常感謝。 – Mkgl 2011-02-03 09:15:34

2

你不需要在字符類的反斜槓,所以你的正則表達式應該閱讀(部分)[/. -]。還要注意的是,空間和破折號皆已空間,因爲[.- ]將被解釋爲「.之間的任何字符