正则篇
一、参考资料来源:
正则工具:https://www.debuggex.com/
正则教程:http://www.cnblogs.com/China3S/archive/2013/11/30/3451971.html
《常用正则表达式》
二、正则方法汇总:
^\s+|\s+$,//去掉首尾空格
^[A-Za-z]+$,//匹配不区分大小写的英文字母组成的字符串,也可以写成:^[a-z]+$/i
^[a-z]+$,//匹配小写英文字母字符串,大写:^[A-Z]+$
^[a-zA-Z-0-9]+$,//匹配由数字与英文字母组成的字符串
^\w+$,//匹配由英文字母、数字或者下划线组成的字符串
^[\u4e00-\u9fa5a-zA-Z0-9\s]+$,//中文、英文、数字和空格
^[1-9]\d*$,//匹配正整数,\d* 表示0-9位中任意一位或多位数字,*号表示匹配前面元字符0次或多次
^-[1-9]\d*$,//匹配负整数
^-?[1-9]\d*$,//匹配整数
^[1-9]\d*|0$,//匹配非负整数
^-[1-9]\d*|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)$,//匹配浮点数
中文字符正则
var rcjk = /[\u2E80-\u2EFF\u2F00-\u2FDF\u3000-\u303F\u31C0-\u31EF\u3200-\u32FF\u3300-\u33FF\u3400-\u4DBF\u4DC0-\u4DFF\u4E00-\u9FBF\uF900-\uFAFF\uFE30-\uFE4F\uFF00-\uFFEF]+/g;
解析说明:
普遍使用的正则是[\u4e00-\u9fa5],但这个范围并不完整。例如:
/[\u4e00-\u9fa5]/.test( '⻏' ) // 测试部首⻏,返回false
根据Unicode 5.0版编码,要准确的判断一个中文字符要包括:
范围 含义 范围 含义
2E80-2EFF CJK 部首补充 2F00-2FDF 康熙字典部首
3000-303F CJK 符号和标点 31C0-31EF CJK 笔画
3200-32FF 封闭式 CJK 文字和月份 3300-33FF CJK 兼容
3400-4DBF CJK 统一表意符号扩展 A 4DC0-4DFF 易经六十四卦符号
4E00-9FBF CJK 统一表意符号 F900-FAFF CJK 兼容象形文字
FE30-FE4F CJK 兼容形式 FF00-FFEF 全角ASCII、全角标点
因此,正确的匹配中文字符正则表达式为:
var rcjk = /[\u2E80-\u2EFF\u2F00-\u2FDF\u3000-\u303F\u31C0-\u31EF\u3200-\u32FF\u3300-\u33FF\u3400-\u4DBF\u4DC0-\u4DFF\u4E00-\u9FBF\uF900-\uFAFF\uFE30-\uFE4F\uFF00-\uFFEF]+/g;
如果不希望匹配标点、符号,在正则中去掉对应的范围即可:
3000-303F CJK 符号和标点 FF00-FFEF 全角ASCII、全角标点
HTML标记正则
var rtag = /^<([a-z]+)\s*\/?> (?:<\/\1>)?$/i, //去掉了中间的.* ,应用范围仅限于简单的标签匹配、提取,不能匹配嵌套标记。
邮箱正则
var remail = /^([\w-_]+(?:\.[\w-_]+)*)@((?:[a-z0-9]+(?:-[a-zA-Z0-9]+)*)+\.[a-z]{2,6})$/i;
URL正则
var reg=/(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/, //不完善
用户名或帐号正则:\w{4,16}
国内电话号码正则:[1-9][0-9]{4,}
中国邮政编码正则:[1-9]\d{5}(?!\d)
身份证正则
简单版:\d{15}|\d{18}
复杂版:
function parseID(ID) {
if ( ID.length == 15 ) {
// 升级为18位
ID = ID.substr( 0, 6 ) + "19" + ID.substr( 6 );
// 前17位对应的系数
var rank = [
"7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"
];
// 前17为加权除以17后的余数对应的最后一位身份证号码
var last = [
"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"
];
// 加权和
for ( var i = 0, sum = 0, len = ID.length; i < len; i++)
sum += ID[ i ] * rank[ i ];
// 加上最后一位
ID += last[ sum % 11 ];
}
if ( ID.length != 18 ) return null;
var match = rid.exec( ID );
return match ? {
ID : ID,
area : match[ 1 ],
y : match[ 2 ],
m : match[ 3 ],
d : match[ 4 ],
sex : match[ 5 ] % 2
} : null;
}
IP地址正则
var rip = /^(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])$/;
进一步增加分组:
var rip2 = /^([01]?\d{1,2}|2[0-4]\d|25[0-5])\.([01]?\d{1,2}|2[0-4]\d|25[0-5])\.([01]?\d{1,2}|2[0-4]\d|25[0-5])\.([01]?\d{1,2}|2[0-4]\d|25[0-5])$/;
去掉首尾空格正则(优化)
var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; //说明:\s空格 \uFEFF unicode编码空格 \xA0
=> (test + '').replace(rtrim, '');
(test + '')字符串去掉首尾空格