JAVAEE笔记——前端技术之正则表达式

JS正则表达式匹配与搜索

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>JavaScript的正则表达式</title>
    </head>
    <body>
        <h1>JavaScript中的正则表达式</h1>
    </body>
    <script>
        //正则的使用
        var str = "wert45678yuiyertw";
        //使用字符串的match()方法来正则匹配字符串str中的数字
       console.log(str.match(/[0-9]/)); // +表示匹配多个字符
       //使用RegExp创建一个正则对象
        var pat = new RegExp("[0-9]+");
        console.log(str.match(pat));
        console.log(pat.exec(str)); //使用正则对象的pat方法进行匹配
        //以上三个返回结果一致,即["45678", index: 4, input: "wert45678yuiyertw", groups: undefined]
​
        console.log("=======================");
​
        //正则搜索
        console.log(str.search(/[0-9]+/)); //返回首次匹配位置,没有则返回-1
        console.log(str.search(pat)); //返回首次匹配位置,没有则返回-1
        console.log(pat.test(str)); //true  返回是否匹配
​
        //匹配多个
        console.log("=======================");
        var str = "wert45678yu456iye678rtw";
        console.log(str.match(/[0-9]+/)); //默认只匹配一次
        console.log(str.match(/[0-9]+/g)); // (3) ["45678", "456", "678"] 使用g修饰符,匹配所有信息。
    </script>
</html>

修饰符

JAVAEE笔记——前端技术之正则表达式

方括号

方括号内表示的都是或的意思,^表示取反,非。小括号内表示匹配多个

JAVAEE笔记——前端技术之正则表达式

量词

JAVAEE笔记——前端技术之正则表达式

元字符

大写字母表示小写字母意义的取反

JAVAEE笔记——前端技术之正则表达式

正则表达式语法

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>JavaScript的正则表达式</title>
    </head>
    <body>
        <h1>JavaScript的正则表达式</h1>
    </body>
    <script>
        //正则的使用
        var str  = "wert455rbr5253geg6gerg78gee89yuitrew";
        //使用正则匹配字符串str中的数字
        console.log(str.match(/[0-9]/g));//匹配任意一位数字
        console.log(str.match(/[0-9][0-9]/g));//匹配任意2位数字
        console.log(str.match(/[0-9]{3}/g));//[0-9]{n}:匹配任意n位数字
        console.log(str.match(/\d{2,3}/g));//[0-9]{2,3}:匹配任意2位或3位数字   \d:使用元字符来匹配数字
​
        // \d{1,} [0-9]{1,} \d+ [0-9]+ 都表示至少一位数字
​
        //精确匹配
        var pat = new RegExp("[0-9]+");
        console.log(pat.test("dehfeuf2567fefef"));  //true 匹配字符串中是否含有数字
​
        var pat = new RegExp("^[0-9]+");
        console.log(pat.test("dehfeuf2567fefef"));  //false 匹配字符串中是否是以数字开头
        console.log(pat.test("2567thj"));  //true 匹配字符串中是否是以数字开头
​
        var pat = new RegExp("[0-9]+$");
        console.log(pat.test("er2567thj"));  //false 匹配字符串是否是以数字结尾
        console.log(pat.test("wer2567")); //true 匹配字符串是否以数字结尾
​
        var pat = new RegExp("^[0-9]+$");
        console.log(pat.test("er2567thj"));  //false 匹配字符串中是否是纯数字
        console.log(pat.test("wer2567")); //false 匹配字符串中是否是纯数字
        console.log(pat.test("2567")); //true 匹配字符串中是否是纯数字
​
        var pat2 = new RegExp("^[0-9]{6}$"); //精确匹配任意6位数字
    </script>
</html>

正则表达式替换与分割

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>JavaScript的正则表达式</title>
    </head>
    <body>
        <h1>JavaScript的正则表达式分割与替换</h1>
    </body>
    <script>
        var str = "23:45:67:89:76";
        console.log(str.split(":")); //使用字符串拆分
​
        var str = "23:45;67!89#76";
        console.log(str.split(/^[0-9]/)); //使用正则表达式进行分割,即利用数字进行分割
​
        var str = "23:45;67!89#76";
        //将上面字符串的分隔符统一替换成逗号
        console.log(str.replace(/[^0-9]/g,",")); //23,45,67,89,76
​
        str = "<b>aaa</b><b>bbb</b><b>ccc</b>"
        //将上面字符串中的<b></b>标签替换成<i></i>
        console.log(str.replace(/<b>(.*?)<\/b>/g,"<i>$1</i>"));
        //.代表任意字符,*代表任意数量  .*是一种贪婪匹配(最大)  .*?是拒绝贪婪匹配(最小匹配)  $1表示重复正则中第一个小括号里面的内容
        console.log("=========================");
​
        str = "04/28/2020";  //西方日期格式,请使用正则替换成中国的[年月日]格式
        console.log(str.replace(/(\d{2})\/(\d{2})\/(\d{4})/,"$3-$1-$2"));
        //其中$1,$2,$3 表示重复正则中第一第二第三个小括号中内容
    </script>
</html>

正则表达式表单验证

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>JavaScript的正则表达式</title>
    </head>
    <body>
        <h1>JavaScript的正则表达式在表单验证中的实例</h1>
        <form action="gammar.html" name="myform" οnsubmit="return doSubmit()" method="post">
        帐号:<input type="text" name="uname" οnblur="checkUname()"/><br/><br/>
        邮箱:<input type="text" name="email" οnblur="checkEmail()"/><br/><br/>
            <input type="submit" value="提交">
        </form>
    </body>
    <script>
        //验证帐号函数
        function checkUname() {
            //获取账号信息
            var uname = document.myform.uname.value; //获取输入框的信息
            //执行验证
            if (uname.match(/^\w{8,16}$/)==null){ //n$:以n为结尾的字符串
                alert("请输入8~16位的帐号信息!")
                return false;
            }
            return true;
        }
​
        //验证邮箱函数
        function checkEmail() {
            //获取帐号信息
            var email  = document.myform.email.value;
            //执行验证
            if(email.match(/^\[email protected]\w+(\.\w+){1,2}$/) == null){
                alert("请输入正确的Email信息!");
                return false;
            }
            return true;
        }
​
        //表单提交
        function doSubmit() {
            return checkUname()&&checkEmail();
        }
    </script>
</html>

表单验证作业示例

尚未未完成的功能:文字,按钮的间隔优化,密码的屏蔽,下拉框的是否有输入的判断。

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>个人信息登记表</title>
        <style>
        form{
        width: 700px;
        margin: 50px auto;
        padding: 20px;
        }
        div{
        padding: 5px 0;
        }
        label{
        display: inline-block;
        width: 100px;
        margin-right: 40px;
        text-align: right;
        }
        span{
        color: #ddd;
        font-size:12px
        }
        .inputText{
        display: inline-block;
        width: 260px;
        margin-right: 20px;
        }
        </style>
    </head>
    <body>
        <h1>个人信息登记表</h1>
        <form name="myform" method="post" οnsubmit="return dosubmit()" >
            <div>
                <label>登录帐号:</label>
                <input type="text" class="inputText" name="uaccount" οnblur="checkAccount()"/>
                <span id="accSpan">要求6-18位有效字符(字母、数字、下划线)</span>
                <br><br>
            </div>
            <div>
                <label>登录密码:</label>
                <input type="text" class="inputText" name="upassword" οnblur="checkPassword()"/>
                <span id="pwSpan">6-18位任意字符</span>
                <br><br>
            </div>
            <div>
                <label>重复密码:</label>
                <input type="text" class="inputText" name="rePassword" οnblur="repeatPassword()"/>
                <span id="repwSpan">重复密码与登录密码一致</span>
                <br><br>
            </div>
            <div>
                <label> 性   别:</label>
                <input type="radio" name="sex" value="男"/>男
                <input type="radio" name="sex" value="女"/>女
                <span id="sex">必须选择一个</span>
                <br><br>
            </div>
            <div>
                <label>年   龄:</label>
                <input type="text" class="inputText" name="age" οnblur="checkAge()"/>
                <span id="ageSpan">大于0的任意两位整数</span>
                <br><br>
            </div>
            <div>
                <label>手机号码:</label>
                <input type="text" class="inputText" name="cellPhone" οnblur="checkedPhone()"/>
                <span id="cellphoneSpan">由1开头的11位整数</span>
                <br><br>
            </div>
            <div>
                <label>邮   箱:</label>
                <input type="text" class="inputText" name="email" οnblur="checkEmail()"/>
                <span id="emailSpan">有效的Email地址</span>
                <br><br>
            </div>
            <div>
                <label>学   历:</label>
                <select>
                    <option value="0">请选择</option>
                    <option value="1">大专</option>
                    <option value="2">本科</option>
                    <option value="3">硕士</option>
                    <option value="4">博士</option>
                </select>
                <span id="education">必须选择一个学历选项</span>
                <br><br>
            </div>
            <span> <input type="submit" value="提交"> <button type="reset" class="button">重置</button></span>
​
        </form>
    </body>
​
    <script>
        //帐号验证函数
        //提示框style样式设置函数
        function spanColor(colors) {
            document.getElementById(colors).style.color="red";
        }
​
        function checkAccount() {
            red = spanColor('accSpan');
            //获取信息
            var account = document.myform.uaccount.value;
            var re = /^[0-9A-Za-z_]{6,18}$/;
            if(account ==""){
                document.getElementById('accSpan').innerText="请输入帐号";
                red;
                return false;
            }
            else if(account.length < 6 ||account.length > 18){
                console.log(account);
                document.getElementById('accSpan').innerText="格式错误,长度应为6-18个字符";
                red;
                return false;
            }
            else if (!re.test(account)){
                document.getElementById("accSpan").innerText="格式错误,只能包含数字,英文字母和下划线";
                red;
                return false;
            }
            else {
                document.getElementById('accSpan').innerText ="";
                return true;
            }
​
        }
​
        //密码验证信息
        function checkPassword() {
            var password = document.myform.upassword.value;
            var re = /^.{6,18}$/;
            red = spanColor('pwSpan');
            if(password ==""){
                document.getElementById('pwSpan').innerText="请输入密码";
                red;
                return false;
                }
            else if (password.length < 6 ||password.length > 18){
                console.log(password);
                document.getElementById('pwSpan').innerText="格式错误,长度应为6-18个字符";
                red;
                return false;
            }
            else if (re.test(password)){
                document.getElementById('pwSpan').innerText ="";
                return true;
            }
            }
​
        //核对重复密码
        function repeatPassword() {
            red = spanColor('repwSpan');
            var password = document.myform.upassword.value;
            var repassword = document.myform.rePassword.value;
            if(repassword==""){
                document.getElementById('repwSpan').innerText="请输入重复密码";
                red ;
                return false;
            }
            else if(password != repassword){
                document.getElementById('repwSpan').innerText="两次密码输入不一致";
                red ;
                return false;
            }
            else {
                document.getElementById('repwSpan').innerText ="";
                return true;
​
            }
        }
​
        //核对年龄
        function checkAge() {
            red = spanColor('ageSpan');
            var age = document.myform.age.value;
            re = /^\d{1,3}$/;
            if(age==""){
                document.getElementById('ageSpan').innerText="请输入您的年龄信息";
                red ;
                return false;
            }
            else if(age<0||age>120){
                document.getElementById('ageSpan').innerText="请输入正确的年龄";
                red ;
                return false;
            }
            else if (!re.test(age)){
                document.getElementById('ageSpan').innerText="请输入数字";
                red ;
                return false;
            }
            else {
                document.getElementById('ageSpan').innerText ="";
                return true;
            }
        }
​
        //核对手机号
        function checkedPhone() {
            red = spanColor('cellphoneSpan');
            var phoneNumber = document.myform.cellPhone.value;
            re = /^1\d{10}$/
            if(phoneNumber==""){
                document.getElementById('cellphoneSpan').innerText="请输入您的手机号码";
                red;
                return false;
            }
            else if(!re.test(phoneNumber)){
                document.getElementById('cellphoneSpan').innerText="请输入正确的手机号";
                red;
                return false;
            }
            else{
                document.getElementById('cellphoneSpan').innerText="";
                return true;
            }
        }
​
        //核对邮箱
        function checkEmail() {
            red = spanColor("emailSpan");
            var email = document.myform.email.value;
            re = /^\[email protected]\w+(\.\w+){1,2}$/;
            if(email==""){
                document.getElementById('emailSpan').innerText="请输入您的邮箱地址";
                red;
                return false;
            }
            else if(!re.test(email)){
                document.getElementById('emailSpan').innerText="请输入正确的邮箱地址";
                red;
                return false;
            }
            else{
                document.getElementById('emailSpan').innerText="";
                return true;
            }
        }
​
        //表单提交
        function dosubmit() {
            flag = checkAccount()&&checkPassword()&&repeatPassword()&&checkAge()&&checkedPhone()&&checkEmail();
            if (flag){
                alert("表单提交成功!")
                return true;
            }
            alert("请确认输入的信息是否有误");
            return false;
        }
​
        /*//表单重置
        function doReset() {
            document.getElementById("myform").reset();
        }*/
    </script>
</html>