js正则

来源:互联网 发布:知乎日报启动图片 编辑:程序博客网 时间:2024/06/05 18:06

1.正则的声明和使用

通过构造函数定义

var 变量名= new RegExp(/表达式/);

通过直接量定义(简单方便,我们一般用这个)

var 变量名= /表达式/;

匹配模式:

i  区分大小写  把大写转换为小写  

g global 全局变量

常用方法,

test方法可用于检测传入的字符串是否包含符合该规则的字符串,并返回布尔值  

exp.test("要检测的字符串")

replace() 方法  替换   

字符串对象.replace(被替换正则式或字符串,替换的目标字符),返回值:替换后的新字符串

 

正则表达式格式:var 变量名= new RegExp(/表达式/, 修正符);

2.转义字符:

                 


3.\r,\n,\r\n的区别

在万恶的旧社会,打字机换行(\n newline)之后只会下移一行,需要回到一行的开头(\r return)才能继续打字

老式的操作系统也继承了打字机的这一特性,但用户换行之后一般都是要回到开头的,因此新式的操作系统为了方便将键盘上的Enter键的含义修改为\r\n或者直接将

\n的含义改为“移动到下一行的开头”

4.括号

()表示一组

[]表示一个字符的位置

{}表示次数


5.或运算符:| 表示或 ,或的优先级最低可以通过()提升优先级

eg.3> 5  | 3> 6

语法:  x | y    匹配 x 或 y 

在基础语法里面, 采取的措施就是, 要检测的对象, 只要有满足其中一个条件的对象,返回结果就为真。

console.log(/hei/.test("hei"));

console.log(/hei/.test("he"));

console.log(/hei/.test("heihei"));

console.log(/hei/.test("aheia"));

console.log(/hei/.test("aheaia"));

console.log(/andy|and/.test("andy"));

console.log(/andy|and/.test("and"));

console.log(/andy|and/.test("andandy"));

console.log(/andy|and/.test("any"));

console.log(/andy|and/.test("any"));

console.log(/food|foot/.test("foo"));

console.log(/food|t/.test("foo"));

console.log(/foo(d|t)/.test("foo"));

console.log(/foo(d|t)/.test("food"));

console.log(/foo(d|t)/.test("foot")); 

6.非运算符:^

^只有在[]内才表示非 ,在外边表示限制开始

/^abc/   和  /[^abc]/ 表达的意思是是不一样的

7.边界

^ :会匹配行或者字符串的起始位置,限制开头

注意,一个区别:  ^只有在[]内才表示非    在外边表示限制开始

/^abc/   和  /[^abc]/ 表达的意思是是不一样的

$ :会匹配行或字符串的结尾位置


^$在一起 表示必须是这个(精确匹配)

console.log(/^abc/.test("abc"));

console.log(/^abc/.test("abcd"));

console.log(/^abc/.test("aabcd"));

console.log(/^abc$/.test("abc"));

console.log(/^abc$/.test("abcd"));

console.log(/^abc$/.test("aabc"));

8.量词

 "*"  重复零次或更多   x>=0   贪婪

 "+"  重复一次或更多次x>=1  

 "?"  重复零次或一次  x=(0||1)

console.log(/^a*$/.test("a"));

console.log(/^a*$/.test("aa"));

console.log(/^abc*$/.test("ab"));

console.log(/^abc*$/.test("abcc"));

console.log(/^(abc)*$/.test("cd"));

console.log(/^(abc)*$/.test("ab"));

console.log(/^(abc)*$/.test("abcabc"));

{n}   n次  x=n

{n,}  重复n次或更多  x>=n

{n,m} 重复出现的次数,最少匹配 n 次且最多匹配 m 次

9.其他

- : 连接,表示a到b之间的区域,要在[]才是这个意思

10.预定义类:

.        [^\n\r]         除了换行和回车之外的任意字符

  \d    [0-9]          数字字符digit

  \D   [^0-9]         非数字字符

\w   [a-zA-Z0-9_]      单词字符(所有的英文字母数字和_)word

\W   [^a-zA-Z0-9_]     非单词字符   

  \s     [\f\r\n\t\v]   不可见字符   空白字符   space     

  \S    [^\f\r\n\t\v] 可见字符

11字符类

简单类[abc]  字符集合。匹配所包含的任意一个字符

console.log(/[abc]/.test("a"));

console.log(/[abc]/.test("b"));

console.log(/[abc]/.test("c"));

console.log(/[abc]/.test("ac"));

console.log(/[abc]/.test("d"));

 

负向类[^abc] 表示该位置不可以出现的字符  取反

console.log(/[^abc]/.test("a"));// false

console.log(/[^abc]/.test("b"));// false

console.log(/[^abc]/.test("c"));// false

console.log(/[^abc]/.test("ac")); // false

console.log(/[^abc]/.test("d"));  // true

 

范围类[a-e]  表示该位置可以出现的字符的范围

组合类[a-xA-E0-9] 范围类的组合

12.例子

验证密码强度

varinp1 =document.getElementById("inp1");

varstrength =document.getElementById("strength");

varstrengthLevel =document.getElementById("strengthLevel");

vararr = ["","低","中","高"];

inp1.onkeyup =function() {

varlv =0;

if (/[0-9]/.test(this.value)) {

lv++

}

if (/[a-z]/.test(this.value)) {

lv++

}

if (/[A-Z]/.test(this.value)) {

lv++;

}

strength.innerHTML =arr[lv];

strengthLevel.className ="strengthLv" +lv;

}


验证座机

匹配电话号码:

010-12345678

0313-1234567

开头3或4位(首位为0)

后面7或8位

 

varregexp = /^0\d{2,3}-\d{7,8}$/;


验证姓名 中文姓名  

只能是汉字    并且字数 2-6个之间

[\u4e00-\u9fa5]

unicode转中文可以用unescape()

unescape('\u4e00')

完整版表单验证


checkRE($("inp4"),regTel);

 

functioncheckRE(obj,regexp) {

obj.onblur =function() {

if (regexp.test(this.value)) {

this.nextSibling.innerHTML = "正确";

this.nextSibling.className = "right";

}else {

this.nextSibling.innerHTML = "错误";

this.nextSibling.className = "wrong";

}

}

}

 

验证邮箱:

/^\w+([+-.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;   这是照顾国外邮箱的完整写法

注意:字符放到 [] 内是不需要转义的  比如  \. 需要转义,  但是 [.+]  方括号里面的 . 和 + 就不需要转义了

13.常见项目的匹配

匹配国内电话号码:

/^0\d{2,3}-\d{7,8}$/

匹配姓名:

/^[\u4e00-\u9fa5]{2,}$/

匹配腾讯QQ号:

/^[1-9]\d{4,10}$/

匹配手机号:

/^(13[0-9]|14[57]|15[0-9]|18[0-9])\d{8}$/

匹配邮箱:

/^\w+([+-.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/




原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 在云南移动上充错话费了怎么办 手机版本太低安装不了支付宝怎么办 手机下载支付宝后找不到了怎么办 王者荣耀充值成功游戏未到账怎么办 银行卡号和密码都忘了怎么办 微信支付密码和银行卡号忘了怎么办 请问5位数的密码忘记了怎么办 苹果手机四位数密码忘记了怎么办 锡山教育app登陆密码忘了怎么办 新商盟手机订烟登录忘记密码怎么办 在qq上修改支付密码忘记怎么办 微信红包支付密码忘了怎么办 qq钱包绑定了别人的银行卡怎么办 用支付宝充手机话费怎么退款怎么办 我有个qq号丢了怎么办 微信红包密码输错了怎么办 qq钱包支付限额付不了款怎么办 电信手机没开流量被扣流量钱怎么办 运动鞋子买大了一码怎么办 淘宝直播间粉丝福利购优惠券怎么办 微信卡包的券不小心删了怎么办 0pp0手机官网手机总跳屏怎么办 很想买一部手机但是舍不得钱怎么办 自己没钱了还想贷款买手机怎么办 4g手机锁屏密码忘了怎么办 oppo手机锁屏密码忘了怎么办 三星手机锁屏密码忘了怎么办 网上买的手机想退了怎么办 沙棘排湿排毒后皮肤痒怎么办 做了沙棘排毒两次上上痒怎么办? 微信支付打款认证超时怎么办 微信上买东西钱付款了货没发怎么办 掌上道聚城王者轮回分解错了怎么办 鞋子脱胶了怎么办别傻傻用胶水粘 斗鱼主播积分太低无法收礼物怎么办 信誉积分没有了什么也玩不了怎么办 忘记自己电信卡号的密码怎么办 淘宝卖出去东西的钱被冻结了怎么办 手机店铺搞抽奖活动上当了怎么办 网易云音乐上传作品编辑失败怎么办 手机连了wifi后自动扣费怎么办