有时候验证器不太好用,比如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地址
用之前,请看懂!