正则表达式

正则表达式

1 正则:正确的规则

  • 什么是正则表达式:字符串的规范格式
  • 为什么要使用正则表达式
    正则表达式(regular expression)是一个描述字符规则的对象。如:只能出现字母,只能出现数字,前三个必须是数字等。
    前端往往有大量的表单数据校验的工作,采用正则表达式会使得数据校验的工作量大大减轻,如邮箱验证,手机号码,等等。比起用字符串的函数来判断简单,易用。

正则表达式的组成:普通字符(a,b,c,d,1,2,3,4) 或者 特殊字符(单个字符、组合字符和各种括号和符号)
定义
1.字面量
var reg = /普通字符或者特殊字符/修饰符
// var reg = /a/ 判断字符串是否包含一个a
2.构造方法
// var reg = new RegExp(字符序列,修饰符);
var reg = new RegExp(“a”,“i”);
console.log(reg.test(“a”));
var reg = new RegExp("\d");
console.log(reg.test(“1”));
正则中的特殊字符: //包含 /^$/只能
** 单个字符:**
^:正则开始
: 正 则 结 束 和 : 正则结束 ^和 :需同时存在
. : 元字符, 表示任意一个字符
. : 表示转义字符 .表示. 转义字符不能单独出现,赋予普通字符能力和取消特殊字符能力的运算符
+: 表示其前面紧挨着的字符至少出现1次 等价{1,}
* :表示其前面出现的字符至少出现过0次 等价{0,}
?: 表示其前面出现的字符至少出现过0次,至多1次 等价{0,1}
| : 表示或者
组合字符:
\d : 0-9之间的任意一个数字 \d只占一个位置
\D : 除了\d
\w : 数字,字母 ,下划线 0-9 a-z A-Z _
\W : 除了\w
\s : 空格或者空白等
\S : 除了\s
括号:{},[],()
{m,n}表示括号前面紧挨着的字符至少出现m个,至多出现n个 : 以b开头 至少3个a 至多5个a /^ba{3,5}&/
{m}表示括号前面紧挨着的字符只能出现m个
{m,}表示括号前面紧挨着的字符至少出现m个
[] 表示括号内的任意一个字符
[wd3h]
[a-z]表示任意一个小写字母 [a-zA-Z0-9]
[^ ]表示非括号内的任意一个字符 [^abc] 不能出现abc
()一般与或连用 表示优先级
[\u4e00-\u9fa5] 任意一个中文字符


<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
        <input type="text" name="" id="txt" value="" />
        <button >点击</button>
    </body>
</html>
<script>
    var t = document.getElementById("txt");
    var b = document.getElementsByTagName("button")[0];
    b.onclick = function(){
        var str = t.value;
        //要求 文本框输入字母a
//        var reg = /a/;//包含a
//        var reg = /^aaaa$/;//只包含四个a
//        var reg = /^ba{3,5}$/;//以b开头  至少3个a  至多5个a
//        var reg = /^5{6}$/; //  6个5 /^5{6}$/;
//        var reg = /^\d{6}$/; //邮编   6位数字  
//        var reg = /^\w{6,18}$/; //定义一个 由 字母或数字 或下划线组成的 用户名   范围在6,18之间    
        // 定义一个 由 字母或数字 或下划线组成的 用户名  开头不能是数字   范围在6,18之间  
//        var reg = /^\D\w{5,17}$/;//^[a-zA-Z_]\w{5,17}$/;    
//        var reg =/^.{6,}$/; //定义一个 密码  至少6位      
//        var reg =/^www\.baidu\.com$/; //  www.baidu.com
//        var reg =/^3\+5$/; //写一个  3+5   /^5+3$/X    
//        var reg =/^1[35]\d{9}$/; //以 13 或 15 开头的手机号
//        var reg =/^1(3|5)\d{9}$/;//以 13 或 15 开头的手机号
//        var reg =/^(13|15)\d{9}$/; //以 13 或 15 开头的手机号
//        var reg =/^[\u4e00-\u9fa5]{2}$/; //两个中文
        //test()  正则表达式方法 :  验证某个字符串是否符合某个正则规范
        if( reg.test( str ) ){
            alert("正确");
        }else{
            alert("不正确");
        }
    }
</script>

2.密码强弱判断
一类字符 是 弱 纯数字 弱 纯字母 弱 纯 特殊字符 弱
两类字符 是 中
三类字符 强 包含数字 字母 特殊字符

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <input type="text" id="txt"/>
        <input type="button" id="btn" value="验证"/>
    </body>
</html>
<script>
    var txt = document.getElementById("txt");
    var btn = document.getElementById("btn");
   
    //  只能
    //纯数字  
    var regNum = /^\d+$/;
    //纯字母
    var regLetter = /^[a-zA-Z]+$/;
    //纯特殊字符
    var regChar = /^[!@#$%^]+$/;
    
    // 包含
    var _regNum = /\d+/;
    var _regLetter = /[a-zA-Z]+/;
    var _regChar = /[!@#$%^]+/;
    
    btn.onclick = function(){
        var str = txt.value;
        
        if(regNum.test(str) || regLetter.test(str) || regChar.test(str)){
            alert("弱");
        }else if(_regNum.test(str) && _regLetter.test(str) && _regChar.test(str)){
            alert("强");
        }else{
            alert("中");
        }
    }
</script>

3.表单验证

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
       //action提交的位置   method提交的方式 
        <form action="ok.html" method="get" id="myForm">
            姓名:<input type="text" name="username" id="name"/></br>
            密码:<input type="password" name="pwd" id="pwd"/></br>
            <input type="submit" name="" id="" value="提交" />
        </form>
    </body>
</html>
<script>
    var myForm = document.getElementById("myForm");
    
    //表单提交的事件   该方法返回值为boolen类型   true为提交 false为不提交
    myForm.onsubmit = function(){  
        //验证每一个表单项是否满足正则 只要有一个不满足 直接返回false
        //验证用户名
        var name = document.getElementById("name");
        var pwd = document.getElementById("pwd");
        var regName = /^dahuang$/;
        var strName = name.value;
        if(!regName.test(strName)){
            alert("用户名不合法");
            return false;
        }
        //验证密码
        var regPwd = /^123666$/;
        var strPwd = pwd.value;
        if(!regPwd.test(strPwd)){
            alert("密码不合法");
            return false;
        }
        return true;
    }
</script>

4.表单验证强化版:焦点验证
通常一个表单内容特别多,如果每次全部填写完成才能表单提交,这样对用户的体验非常不好。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <form id="_form" action="ok.html">
            <input type="text" id="_name"/></br>
            <input type="password" id="_pwd"/></br>
            <input type="submit"></br>
        </form>
    </body>
</html>
<script>
    var userName = document.getElementById("_name");
    var userPwd = document.getElementById("_pwd");
    var userform = document.getElementById("_form");
    var flagName = null;
    var flagPwd = null;

    userName.onblur = function(){
        var str = this.value;
        var regName = /^dahuang$/;
        if(regName.test(str)){
            flagName = true;
        }else{
            alert("姓名不合法");
            flagName = false;
        }
    }
    userPwd.onblur = function(){
        var str = this.value;
        var regPwd = /^123666$/;
        if(regPwd.test(str)){
            flagPwd = true;
        }else{
            alert("密码不合法");
            flagPwd = false;
        }
    }
    userform.onsubmit = function(){
        if(flagName && flagPwd){
            return true;
        }else{
            return false;
        }
    }
</script>

5.正则中的相关方法及属性
正则中的相关方法:
test() 检验一个字符串是否符合某一个正则规范,如果符合返回true,否则返回false
用法: reg.test(str)

exec 根据正则表达式查找,结果满足返回一个长度为1的数组(数组只有一个值),不满足返回null
用法:reg.exec(str)
var reg = /\d/;///\d/g
var str = “123456789”;
//var arr = reg.exec(str);
console.log(reg.exec(str)[0]);
console.log(reg.exec(str)[0]);
console.log(reg.exec(str)[0]);
console.log(reg.exec(str)[0]);

lastIndex :这个属性记录的就是下一次捕获从哪个索引开始。
var reg = /\d/g;
var str = “92a345a678a9”;

console.log(reg.exec(str));
console.log(reg.lastIndex);

console.log(reg.exec(str));
console.log(reg.lastIndex);

console.log(reg.exec(str));
console.log(reg.lastIndex);

console.log(reg.exec(str));
console.log(reg.lastIndex);

g---------------全局
i---------------忽略字母大小写

正则中相关字符串的方法:
search方法 返回与正则表达式查找内容匹配的第一个子字符串的位置
用法:str.search(reg)

说明:如果找到则返回子字符至开始处的偏移位,否则返回-1。

var r, re; // 声明变量。
var s = “The rain in Spain falls mainly in the plain.”;
re = /falls/i; // 创建正则表达式模式。
re2 = /tom/i;
r = s.search(re); // 查找字符串。 18
r2 = s.search(re2); -1
document.write(“r:” + r + “;r2:” + r2);// 返回 Boolean 结果。

match 方法
使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回。
str.match(rgExp)

var reg = /\d+/g;
var str = “123a4356a987”;
console.log(str.match(reg));

replace 方法
返回根据正则表达式进行文字替换后的字符串的复制。
stringObj.replace(rgExp, replaceText)

var reg = /laowang/g;
var str = “laowang的隔壁也住着laowang”;
console.log(str.replace(reg,“dahuang”));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值