有時候驗證器不太好用,比如PHP的 is_int 無法驗證數字字符串,會返回bool(false),而 /^[1-9]\d*$/ 能精准驗證是否正整數,(當然PHP自帶的 filter_var 也會通過 ' 123' )所以從比較流行框架搬一些正則來做驗證器,正則才是最精准的驗證。
僅做筆記 - 自用
ThinkPHP內部的驗證規則:
<?php $regex = array( 'require'=> '/.+/', //匹配任意字符,除了空和斷行符 'email' => '/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/', 'phone' => '/^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/',//電話號碼 'mobile' => '/^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$/',//手機號碼 'url' => '/^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/',//超鏈接 'currency' => '/^\d+(\.\d+)?$/',//貨幣 'number' => '/\d+$/', 'qq' => '/^[1-9]\d{4,12}$/', 'integer' => '/^[-\+]?\d+$/',//整數 'double' => '/^[-\+]?\d+(\.\d+)?$/',//浮點數 'english' => '/^[A-Za-z]+$/',//英文字符 'birthday'=>'/^\d{4}\-\d{1,2}-\d{1,2}$/',//生日,雖然本人更喜歡strtotime驗證是否日期格式 ); [\u4e00-\u9fa5] //匹配中文字符的正則表達式 [^\x00-\xff] //匹配雙字節字符(包括漢字在內) \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* //匹配Email地址的正則表達式 [a-zA-z]+://[^\s]* //匹配網址URL的正則表達式 \d{3}-\d{8}|\d{4}-\d{7} //匹配國內電話號碼 [1-9]\d{5}(?!\d) //匹配中國郵政編碼 \d+\.\d+\.\d+\.\d+ //匹配ip地址 ^[1-9]\d*$ //匹配正整數 ^-[1-9]\d*$ //匹配負整數 ^-?[1-9]\d*$ //匹配整數 ^[1-9]\d*|0$ //匹配非負整數(正整數 + 0) ^-[1-9]\d*|0$ //匹配非正整數(負整數 + 0) ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮點數 ^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配負浮點數 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮點數 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非負浮點數(正浮點數 + 0) ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮點數(負浮點數 + 0) ^[A-Za-z]+$ //匹配由26個英文字母組成的字符串 ^[A-Z]+$ //匹配由26個英文字母的大寫組成的字符串 ^[a-z]+$ //匹配由26個英文字母的小寫組成的字符串 ^[A-Za-z0-9]+$ //匹配由數字和26個英文字母組成的字符串 ^\w+$ //匹配由數字、26個英文字母或者下划線組成的字符串 [\u4e00-\u9fa5] //匹配中文字符的正則表達式 [^\x00-\xff] //匹配雙字節字符(包括漢字在內) \n\s*\r //匹配空白行的正則表達式-可用於刪除空白行 ^\s*|\s*$ //匹配首尾空白字符的正則表達式-可以用來刪除行首行尾的空白字符(包括空格、制表符、換頁符等等)-也可以使用trim函數 \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* //匹配Email地址的正則表達式 [a-zA-z]+://[^\s]* //匹配網址URL的正則表達式 評注:表單驗證時很實用 \d{3}-\d{8}|\d{4}-\d{7} //匹配國內電話號碼-固定電話 [1-9][0-9]{4,} //騰訊QQ號從10000開始 [1-9]\d{5}(?!\d) //匹配中國郵政編碼 \d{15}|\d{18} //匹配身份證 \d+\.\d+\.\d+\.\d+ //匹配ip地址
用之前,請看懂!