javascript高程3学习笔记:常用正则表达式

时间:2023-01-08 19:45:27

匹配数字的正则 

  这里注意一点,在对数字使用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+/

 


本文仅代表作者观点,如技术性错误,请联系: javascript高程3学习笔记:常用正则表达式,注明: http://www.juxuyo.com