在上一篇文章中我们介绍了JavaScript面向对象-使用工厂方法和构造函数方法创建对象,本文将我们在日常工作中经常使用的一些正则表达式进行汇总,需要的时候可以直接拷贝来使用。
常用正则表达式
长日期格式
匹配带年月日、时分秒的子串,例如:2016-01-12 18:53:55。
/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/
短日期格式
匹配带年月日的子串,例如:2016-01-12。
/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/
电话号码格式(中国)
匹配中国格式的固定电话号码,例如:(010)0773-5888888,0773-5888888,5888888都能匹配。
/^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/i
手机号码格式
匹配中国格式的手机号码,匹配任何以13、15、18开头的11位手机号码。
/^(13|15|18)\d{9}$/i
传真号码格式
匹配传真号码子串。
/^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/i
电子邮箱地址格式
匹配电子邮箱地址子串。
/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i
邮政编码(中国)格式
匹配中国格式的邮政编码。
/^[\d]{6}$/
判断字符串中是否存在汉字字符
用于判断某个字符串中是否包含汉字字符。
//[\u4E00-\u9FA5]为汉字,[\uFE30-\uFFA0]为全角符号
/^[\x00-\xff]*$/
判断字符串是否为中文
用于判断某个字符串是否由中文汉字组成。
/^[\u0391-\uFFE5]+$/
判断字符串是否为英文
用于判断某个字符串是否由英文组成。
/^[A-Za-z]+$/i
是否是正确的文件名称(路径)格式
用于判断某个字符串是否是正确的文件名称(路径)格式。例如:d://abc/xyz/ok.txt,file:///F:/zzz/ccc/bbb/aaa.html,或者http://www.abc.com/index.html
/[\\\/\*\?\|:<>]/g
是否是正确的URL格式
用于判断某个字符串是否是正确的URL格式。
/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i
上面的正则表达式的详细解释如下:
var strRegex = "^((https|http|ftp|rtsp|mms)?: //)"
+ "?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?"//ftp的user@//
+ "(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP形式的URL- 199.194.52.184
+ "|" // 允许IP和DOMAIN(域名)
+ "([0-9a-z_!~*'()-]+\.)*" // 域名- www.
+ "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\." // 二级域名
+ "[a-z]{2,6})" // first level domain- .com or .museum
+ "|" // 允许为本机
+ "localhost|127.0.0.1" // 允许为本机地址
+ "(:[0-9]{1,4})?" // 端口- :80
+ "((/?)|" // a slash isn't required if there is no file name
+ "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";
是否为合法的货币格式
用于判断某个字符串是否为合法的货币格式。
/^d{0,}(\.\d+)?$/i
是否为合法的QQ号码格式
用于判断某个字符串是否为合法的QQ号码格式。
/^[1-9]\d{4,11}$/i
是否为合法的车牌号码
用于判断某个字符串是否为合法的车牌号码。
/^[\u4E00-\u9FA5][\da-zA-Z]{6}$/
是否为合法的汽车发动机序列号
用于判断某个字符串是否为合法的汽车发动机序列号。
/^[a-zA-Z0-9]{16}$/
是否为合法的用户名字符
用于判断某个字符串是否为合法的用户名字符。合法的用户名要求以字母开头,允许6-16字节,允许字母数字下划线。
/^[a-zA-Z][a-zA-Z0-9_]{5,15}$/i
身份证号码(中国)格式
用于验证中国格式的身份证号码。
function isIDCard(str){
if(str == "") return false;
var iSum = 0;
var info = "";
var sId = str;
var aCity = { 11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "黑龙江", 31: "上海", 32: "江苏", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山东", 41: "河南", 42: "湖北", 43: "湖南", 44: "广东", 45: "广西", 46: "海南", 50: "重庆", 51: "四川", 52: "贵州", 53: "云南", 54: "西藏", 61: "陕西", 62: "甘肃", 63: "青海", 64: "宁夏", 65: "新疆", 71: "台湾", 81: "香港", 82: "澳门", 91: "国外" };
if (!/^\d{17}(\d|x)$/i.test(sId)) { return false; }
sId = sId.replace(/x$/i, "a");
//非法地区
if (aCity[parseInt(sId.substr(0, 2), 10)] == null) { return false; }
var sBirthday = sId.substr(6, 4) + "-" + Number(sId.substr(10, 2)) + "-" + Number(sId.substr(12, 2));
var d = new Date(sBirthday.replace(/-/g, "/"))
//非法生日
if (sBirthday != (d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate())) { return false; }
for (var i = 17; i >= 0; i--) { iSum += (Math.pow(2, i) % 11) * parseInt(sId.charAt(17 - i), 11); }
if (iSum % 11 != 1) { return false; }
return true;
}
是否是正确的数字格式
验证某个字符串是否为正确的数字格式。正确的数字格式可以是正数、负数、整数、正整数、负整数、浮点数、正浮点数、负浮点数。
function isNumeric(str){
if(str == "") return false;
//验证是否是数字
if (isNaN(str)) { return false; }
if (arguments.length == 0) { return false; }
switch (flag) {
case "":
return true;
case "+": //正数
return /(^\+?|^\d?)\d*\.?\d+$/.test(str);
case "-": //负数
return /^-\d*\.?\d+$/.test(str);
case "i": //整数
return /(^-?|^\+?|\d)\d+$/.test(str);
case "+i": //正整数
return /(^\d+$)|(^\+?\d+$)/.test(str);
case "-i": //负整数
return /^[-]\d+$/.test(str);
case "f": //浮点数
return /(^-?|^\+?|^\d?)\d*\.\d+$/.test(str);
case "+f": //正浮点数
return /(^\+?|^\d?)\d*\.\d+$/.test(str);
case "-f": //负浮点数
return /^[-]\d*\.\d$/.test(str);
default: //缺省
return true;
}
}
是否是正确的颜色(#FFFFFF形式)格式
验证某个字符串是否为正确的十六进制颜色格式。
function isColor(str){
if (str == "") { return true };
if (str.length != 7) { return false };
return (str.search(/\#[a-fA-F0-9]{6}/) != -1);
}
判断当前String对象是否可以作为安全密码字符
验证某个字符串是否是否可以作为安全密码字符。安全密码字符的定义是由字符和数字组成,至少6位。注意,测试结果要进行取反操作,就是说得到的结果为false
表示安全,得到的结果为true
表示不安全。
/^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*)|.{0,5})$|\s/
对字符串进行Html编码
可以将某个字符串进行HTML编码。即将相应的HTML标签符号转换为实体符号。例如:>转换为>
function toHtmlEncode(str){
var temp = str;
temp = temp.replace(/&/g, "&");
temp = temp.replace(/</g, "<");
temp = temp.replace(/>/g, ">");
temp = temp.replace(/\'/g, "'");
temp = temp.replace(/\"/g, """);
temp = temp.replace(/\n/g, "<br>");
temp = temp.replace(/\ /g, " ");
temp = temp.replace(/\t/g, " ");
return temp;
}