匹配18位身份證號,正則表達式如下:
/^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|31)|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}([0-9]|x|X)$/
說明:現在身份證號都已經是18位了,沒必要再去考慮匹配15位。
18位身份證號組成:6位地區號+4位年+4位月日+3位編號+1位新生成編號
邏輯:
1)6位地區號:首位非0,后五位數字。對應正則:[1-9][0-9]{5}
2)4位年:19或20開頭,后兩位數字。對應正則:(19|20)[0-9]{2}
3)4位月日:
i)大月31天。對應正則:(01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|31)
ii)小月30天。對應正則:(04|06|09|11)(0[1-9]|[1-2][0-9]|30)
iii)2月28天或29天。對應正則:02(0[1-9]|[1-2][0-9])
4)3位編號:三位數字。對應正則:[0-9]{3}
5)1位新生成編號:數字或x。對應正則:([0-9]|x|X)
現僅剩以下缺點(不太用到):
1)未匹配閏年
2)未匹配前三位地區編號是否存在
最后附上:
【手機號正則】
/^1[3-8][0-9]{9}$/
【郵箱正則】
/^\w+([.]\w+)?[@]\w+[.]\w+([.]\w+)?$/
【網址正則】
(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]
【日期】
/^((19|20)[0-9]{2})-((0[1-9])|10|11|12)-(([0-2][0-9])|30|31)$/
【文件名/:*?'"<>\】
/\/|:|\*|\?|'|"|<|>|\\/
【2位小數】
/^[0-9]+(.[0-9]{1,2})?$/