正则表达式用于各个情形的数据校验,用于匹配字符串。例如对请求参数的校验,客户端给服务器发送数据前,需初步对数据进行合法性校验;由于客户端数据不可信,服务器要对数据进行严格的合法性校验。
本文记录的是常用的身份证及手机号等合法性正则校验,以Java编程为例。
正则基本语法
^ 匹配字符串的起始位置,如果将 ^ 用作括号表达式中的第一个字符,则会对字符集求反,[^abc] 与除 a、b 和 c 以外的任何字符匹配
$ 匹配字符串的结束位置
* 任意次(零次或多次)匹配前面的字符或子表达式,等效于 {0,}
+ 至少一次(一次或多次)匹配前面的字符或子表达式,等效于 {1,}
? 零次或一次匹配前面的字符或子表达式,等效于 {0,1}
. 匹配单个字符, a.c 与“abc”、“a1c”和“a-c”匹配
| 或,z|food 与“z”或“food”匹配。(z|f)ood 与“zood”或“food”匹配
( ) 小括号表示匹配括号中全部字符
[] 中括号表示匹配括号中一个字符 范围描述 如[0-9 a-z A-Z]
{} 大括号用于限定匹配次数,如{n}表示匹配n次;{n,}表示至少匹配n次;{n,m}表示至少匹配n次,最多匹配m次
\ 转义字符,如上基本符号匹配都需要转义字符,如 * 表示匹配*号。\f 为换页符,\n 为换行符,\r 为回车符,\t 为Tab 字符,\v 为垂直制表符
\w 表示英文字母和数字以及下划线,等效于 [A-Za-z0-9_]
\W 英文字母,数字,下滑线以外的字符,等效于 [^A-Za-z0-9_]
\d 表示数字,等效于 [0-9]
\D 非数字,等效于 [^0-9]
\s 任何空白字符。其中包括空格、制表符和换页符,[\f\n\r\t\v]
\S 任何非空白字符,[^\f\n\r\t\v]
exp1(?=exp2) 前瞻(look ahead),查找exp2前面的exp1,如 a(?=b) 匹配ab但不匹配ac
(?<=exp2)exp1 后顾(look behind),查找exp2后面的exp1,如 (?<=b)a 匹配ba但不匹配bc
exp1(?!exp2) 负前瞻,查找后面不是exp2的exp1, 如 a(?!b) 匹配ac但不匹配ab
(?<!=exp2)exp1 负后顾,查找前面不是exp2的exp1, 如 (?<!b)a 匹配ca但不匹配ba
常见正则校验
手机号合法性校验
这里合法性校验对象为中国大陆及港澳手机号。
以上手机号校验太严格,一般情况,不建议使用,大陆手机号可用以下正则简单校验即可:
身份证合法性校验
以下是完整的测试函数,包括15位和18位身份证号合法性校验以及15位到18位身份证号的转换。
|
|
银行卡号合法性校验
|
|
密码合法性校验(6-10位字母数字组合为例)
|
|
时间格式yyyy-MM-dd hh:mm:ss
|
|
邮箱格式
|
|
Ipv4地址
|
|
Boolean类型的字符串形式
|
|
unix时间戳,毫秒级,到2030年
|
|
其他
|
|