jQuery源码学习笔记(2)

正则篇

一、参考资料来源:

正则工具: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 + '')字符串去掉首尾空格

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

  • 正则表达式到底是什么东西?字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等...
    狮子挽歌阅读 2,134评论 0 9
  • tags: 正则表达式categories: JavaScript欢迎点击我的博客原文 前端会遇到很多字符串验证问...
    浅茉Sara阅读 756评论 1 2
  • re模块手册 本模块提供了和Perl里的正则表达式类似的功能,不关是正则表达式本身还是被搜索的字符串,都可以...
    喜欢吃栗子阅读 3,977评论 0 13
  • 一、匹配符 \:指出接着的字符为特殊字符。 ^:表示匹配的字符必须在最前边。 $:表示匹配的字符必须在最后边。 *...
    活叁黄辉冯阅读 764评论 0 3
  • \d 代表 [0-9] \l 代表 [a-z] \u 代表 [A-Z] \a 代表 [A-Za-z] \w 代表 ...
    zhuoshao阅读 1,353评论 0 5