匹配数字的正则
这里注意一点,在对数字使用test或者exec函数的时候,会先将该数字转换为10进制,或许去除前导0,然后进行匹配。比如011会转换为9,09会转换为9,不管是+0还是-0,都转换为0,1.000会被转换为整数1,而不会作为浮点数,为了节约内存空间。
alert(/-9/.test(-011)); // true alert(/-9/.test(-09)); // true alert(/^0$/.test(+000)); // true 完全匹配0 alert(/^0$/.test(-000)); // true 完全匹配0
在网上楼主也搜了一些关于数字正则表达式整理的,比如:正整数:/^\d*[1-9]\d*$/,分析一下可以看出,这个表达式就考虑了前导0的存在,鉴于以上的特性,可以将其优化为:/^[1-9]\d*$/,下面就给出常用数字表达式:
NUMBER_PATTERN1 : /^[1-9]\d*$/, // 匹配正整数(不包括0) NUMBER_PATTERN2 : /^-[1-9]\d*$/, // 匹配负整数(不包括0) NUMBER_PATTERN3 : /^-?([1-9]\d*|0)$/, // 匹配整数(包括0) NUMBER_PATTERN4 : /^[1-9]\d*|0$/, // 匹配非负整数(正整数 + 0) NUMBER_PATTERN5 : /^-[1-9]\d*|0$/, // 匹配非正整数(负整数 + 0) NUMBER_PATTERN6 : /^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$/, //匹配正浮点数(不包括0),前面一半是"正整数.整数",后面一半是"0.正整数(这里的正整数需要在patt1的前面加上\d*,因为是在小数点后面,前面有没有0是完全不同的)" NUMBER_PATTERN7 : /^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$/, // 匹配负浮点数 NUMBER_PATTERN8 : /^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0)$/, // 匹配浮点数 NUMBER_PATTERN9 : /^([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0)$/, // 匹配非负浮点数(正浮点数 + 0),这里一定要加小括号,如果不加,那么将可以匹配10 NUMBER_PATTERN10 : /^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)|0)$/, // 匹配非正浮点数(负浮点数 + 0),一样需要注意小括号的位置
匹配常用字符串的正则
STRING_PATTERN1 : /^[A-Za-z]+$/, // 匹配由26个英文字母组成的字符串,这里也可以使用 /^[a-z]+$/i STRING_PATTERN2 : /^[A-Z]+$/, // 匹配由26个英文字母的大写组成的字符串 STRING_PATTERN3 : /^[a-z]+$/, // 匹配由26个英文字母的小写组成的字符串 STRING_PATTERN4 : /^[A-Za-z0-9]+$/, // 匹配由数字和26个英文字母组成的字符串 注意\w包含下划线_ STRING_PATTERN5 : /^\w+$/, // 匹配由数字、26个英文字母或者下划线组成的字符串
匹配常用的中文的正则[转]
/* 中文正则 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、全角标点 如果不希望匹配标点、符号,在正则中去掉对应的范围即可: 3000-303F CJK 符号和标点 FF00-FFEF 全角ASCII、全角标点 */ CN_PATTERN1 : /[\u2E80-\u2EFF\u2F00-\u2FDF\u3000-\u303F\u31C0-\u31EF\u3200-\u32FF\u3300-\u33FF\u3400-\u4DBF\u4DC0-\u4DFF\u4E00-\u9FBF\uF900-\uFAFF\uFE30-\uFE4F\uFF00-\uFFEF]+/, // 这个是比较全面的 CN_PATTERN2 : /[\u2E80-\u2EFF\u2F00-\u2FDF\u31C0-\u31EF\u3200-\u32FF\u3300-\u33FF\u3400-\u4DBF\u4DC0-\u4DFF\u4E00-\u9FBF\uF900-\uFAFF\uFE30-\uFE4F]+/, // 不匹配标点、符号 CN_PATTERN3 : /[\u4e00-\u9fa5]+/, // 网络上比较常见的正则
匹配双字节字符的正则
比如中文,大致的思路就是去除charCode在0~128之间的
DOUBLE_CHAR_PATTERN : /[^\x00-\xff]/,
这里讲一下获取字符串的实际长度的方法?两种方法:
a、通过判断charCode的范围
function getTLength(str) { var realLength = 0, len = str.length, charCode = -1; for (var i = 0; i < len; i++) { charCode = str.charCodeAt(i); if (charCode >= 0 && charCode <= 128){ realLength += 1; }else{ realLength += 2; } } return realLength; }; alert(getTLength('你好世界helloworld')); // 18
b、通过双字节正则,将双字节字符替换为两个单字节字符,然后计算length
function getTLength(str) { return str.replace(/[^\x00-\xff]/g,"aa").length; }; alert(getTLength('你好世界helloworld')); // 18
匹配HTML标记的正则,不能进行嵌套匹配
HTML_TAG_PATTERN : /<(\S+?)>.*?<\/\1>|<\S+? \/>/gi,
var patt = Constants.HTML_TAG_PATTERN; alert(patt.exec("<div>abc</div><input />")); // <div>abc</div>,div alert(patt.exec("<div>abc</div><input />")); // <input />,null alert(patt.exec("<div>abc</div><input />")); // null alert("<div>abc<div>abc</div></div><input />".match(patt)); // <div>abc<div>abc</div> , </div><input />,不能进行嵌套匹配!!!
匹配首尾空白字符的正则
BLANK_BAE_PATTERN : /^\s+|\s+$/g,
var patt = Constants.BLANK_BAE_PATTERN; var str = " \t bbbbbb \r\n ".replace(patt,""); // dwl("|"+str+"|"); // |bbbbbb|
匹配Email地址的正则
EMAIL_PATTERN : /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/g,
匹配网址URL的正则
URL_PATTERN : /[a-zA-z]+:\/\/[^\s]*/g,
匹配帐号是否合法的正则
INVALID_PATTERN1 : /^[a-zA-Z]\w{4,15}$/, // 以字母开头 INVALID_PATTERN2 : /\w{5,16}$/, // 可以以下划线_开头
匹配国内电话号码的正则
TEL_PATTERN : /\d{3}-\d{8}|\d{4}-\d{7,8}/, // 网上的版本是前3后8,或前4后7,但是我加号码是前4后8.。
匹配腾讯QQ号
QQ_PATTERN : /[1-9][0-9]{4,}/,
匹配中国邮政编码
POST_CODE_PATTERN : /[1-9]\d{5}(?!\d)/, // (?!\d)为负后瞻,表示后面不应该出现数字0-9
匹配IP地址的正则
IP_PATTERN : /\d+\.\d+\.\d+\.\d+/
本文仅代表作者观点,如技术性错误,请联系:
,注明:
http://www.juxuyo.com