正規表示式Regular Expression。它有多種翻譯名稱:正規表示法、正則表達式...等等;這裡我用ptt CompScience群組中的RegExp版中文名稱為準。它是用來描述或者匹配一系列符合某個句法規則的字元串的單個字元串;舉例來說,它經常被用來檢查E-mail或是電話之類有規則的字串,輸入的資料是否正確。以下稍微介紹一下它的部分語法:

//:正規表示式開始與結束,設定需比對的字串規則於二個「/」之中。
\d:數字;意同[0-9]。
\D:非數字;意同[^0-9]。
\s:空白。
\S:非空白。
\w:字母。
\W:非字母。
^:起始。
$:結尾。
():先運算。
|:or,或。
+:前面字元必須至少出現一次,1次或多次;意同{1,}。
?:前面字元最多只可以出現一次,0次或1次;意同{0,1}。
*:前面字元可以不出現,也可以出現一次或者多次,0次、1次或多次;意同{0,}。
.:「\n」之外的任何單個字元。
{n}:出現最少n次。
{n,}:出現最少n次。
{n,m}:出現最少n次且最多m次。

這次使用到的地方是在PHP的日期判斷上,運用到PHP上驗證正規表示式的函數preg_match();符合條件傳回true,不符合則傳回false。以下是我對日期格式YYYY-MM-DD的驗證:

<?php
    $YYYY_MM_DD = '/^(\d{2}(([02468][048])|([13579][26]))\-((((0[13578])|(1[02]))\-((0[1-9])|([1-2][0-9])|(3[01])))|(((0[469])|(11))\-((0[1-9])|([1-2][0-9])|(30)))|(02\-((0[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))\-((((0[13578])|(1[02]))\-((0[1-9])|([1-2][0-9])|(3[01])))|(((0[469])|(11))\-((0[1-9])|([1-2][0-9])|(30)))|(02\-((0[1-9])|(1[0-9])|(2[0-8])))))$/';
    $DATE = '2048-02-29';
    if (!(preg_match($YYYY_MM_DD, $DATE))){
        echo '不符合!';
    }
    else{
        echo '符合!';
    }
?>

此正規表示式除了可以判斷大小月,甚至連閏二月也能清楚辨別。其實說穿了也不過是一堆數組的比對罷了;不過看不懂的人可能覺得這是火星文吧~(話說我之前一直覺得它就像火星文...)

另外再推薦一個正規表示式的lib網站:RegExLib.com。裡面有很多正規表示式的判斷可以利用唷!
文章標籤

danielhuang030 發表在 痞客邦 留言(0) 人氣()