正则表达式

正则表达式的规则

目标

了解正则表达式的规则

引入

提问:如果要验证一个手机号码,我们以前应该如何写代码?

 

  1. 判断是否全是数字,isNaN

  2. 长度要是11个字符

  3. 必须以1开头,第2个数字是345789,后面的数字随意

正则表达式作用

  1. 用于校验一个字符串是否匹配规则

  2. 查找字符

回顾正则表达式的规则

符号作用
[a-z]中括号表示1个字符,a-z中任意一个字符
[xyz]x或y或z,三个字符一个
[^xyz]除了xyz之外的任意字符
\d数字
\w单词,相当于[a-zA-Z0-9_]
.任意字符,如果要匹配点号需要转义 \.
()分组
{n}前面的字符出现n次
{n,}前面的字符出现大于等于n次
{n,m}前面的字符出现n次到m之间的次数,包头包尾
+前面的字符出现1~n次
*前面的字符出现0~n次
?前面的字符出现0~1次
|多组字符串选择1个
^匹配开头
$匹配结尾

 

小结

正则表达式主要有哪两个作用?

1. 判断字符串是否匹配
2. 查找字符串</span>

 

使用正则表达式

目标

创建正则表达式有哪2种方式

演示代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>正则表达式</title>
</head>
<body>
<script type="text/javascript">
    /**
     * 创建正则表达式的2种方式:
     * 1. new RegExp("正则表达式")
     * 2. /正则表达式/
     *
     * 判断正则表达式是否匹配字符串的方法:
     * boolean 正则表达式对象.test(字符串) 如果匹配返回true,否则返回false
     * 与Java不同,Java默认是精确匹配。JS默认是模糊匹配,只要包含这个正则表达式的内容就可以
     * 结论:如果要在JS中精确匹配,必须以^开头,以$结尾
     */
    var reg = new RegExp("\\d{3}");  //包含3个连续的数字
    document.write(reg.test("123") + "<br/>");  //true
    document.write(reg.test("abc") + "<br/>");  //false
    document.write(reg.test("a123b") + "<br/>");  //true
    document.write("<hr/>");

    var reg = new RegExp("^\\d{3}");  //匹配3个数字开头
    document.write(reg.test("a123b") + "<br/>");  //false
    document.write(reg.test("123b") + "<br/>");  //true

    document.write("<hr/>");
    var reg = new RegExp("\\d{3}$");  //匹配3个数字结尾
    document.write(reg.test("a123") + "<br/>");  //true

    document.write("<hr/>");
    var reg = new RegExp("^\\d{3}$");  //精确匹配,必须匹配3个数字
    document.write(reg.test("123abc123") + "<br/>");  //false
    document.write(reg.test("456") + "<br/>");  //true

    /*
    使用第2种写法
     */
    var reg = /^\d{3}$/;
    document.write(reg.test("456") + "<br/>");  //true
</script>
</body>
</html>

两种方式的区别

  1. 方式一:正则表达式是做为字符串参数出现的,可以定义成变量,可以进行字符串拼接,相对更加灵活。但\等字符需要转义。

  2. 方式二:本身是一个正则表达式对象,\等字符不需要转义。

匹配模式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>正则表达式匹配模式</title>
</head>
<body>
<script type="text/javascript">
    /*
    i 忽略大小写比较
    1. new RegExp("正则表达式","匹配模式")
    2. /正则表达式/匹配模式
     */
    var reg = new RegExp("cat","i");
    document.write(reg.test("cat") + "<br/>");  //true
    document.write(reg.test("CAT") + "<br/>");  //true
    document.write("<hr/>");

    var reg = /cat/i;
    document.write(reg.test("cat") + "<br/>");  //true
    document.write(reg.test("CAT") + "<br/>");  //true
</script>
</body>
</html>

小结

判断正则表达式与字符串是否匹配的方法是?

boolean 正则表达式对象.test(字符串)
如果匹配返回true

 

案例:校验注册表单

目标

 

onsubmit事件说明

onsubmit事件,如果return false就可以阻止表单提交

 

案例需求

用户注册,需要进行如下验证,请在JS中使用正则表达式进行验证。

  1. 用户名:只能由英文字母和数字组成,长度为4~16个字符,并且以英文字母开头

  2. 密码: 大小写字母和数字6-20个字符

  3. 确认密码:两次密码要相同

  4. 电子邮箱: 符合邮箱地址的格式 /^\w+@\w+(.[a-zA-Z]{2,3}){1,2}$/

  5. 手机号:/^1[3456789]\d{9}$/

  6. 生日:生日的年份在1900~2009之间,生日格式为1980-5-12或1988-05-04的形式,/^((19\d{2})|(200\d))-(0?[1-9]|1[0-2])-(0?[1-9]|[1-2]\d|3[0-1])$/

案例分析

  1. 创建正则表达式

  2. 得到文本框中输入的值

  3. 如果不匹配,在后面的span中显示错误信息,返回false

  4. 如果匹配,在后面的span中显示一个打勾图片,返回true

  5. 写一个验证表单中所有的项的方法,所有的方法都返回true,这个方法才返回true.

代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>验证注册页面</title>
    <style type="text/css">
        body {
            margin: 0;
            padding: 0;
            font-size: 12px;
            line-height: 20px;
        }

        .main {
            width: 525px;
            margin-left: auto;
            margin-right: auto;
        }

        .hr_1 {
            font-size: 14px;
            font-weight: bold;
            color: #3275c3;
            height: 35px;
            border-bottom-width: 2px;
            border-bottom-style: solid;
            border-bottom-color: #3275c3;
            vertical-align: bottom;
            padding-left: 12px;
        }

        .left {
            text-align: right;
            width: 80px;
            height: 25px;
            padding-right: 5px;
        }

        .center {
            width: 280px;
        }

        .in {
            width: 130px;
            height: 16px;
            border: solid 1px #79abea;
        }

        .red {
            color: #cc0000;
            font-weight: bold;
        }

        div {
            color: #F00;
        }

        span {
            color: red;
        }
    </style>
    <script type="text/javascript">
        /**
         * 校验所有的表单项
         */
        function checkAll() {
            return checkUser() && checkMobile();
        }

        /**
         * 检查用户名是否正确
         * 由英文字母和数字组成,长度为4~16个字符,并且以英文字母开头
         */
        function checkUser() {
            //1.得到文本框的值
            let value = document.getElementById("user").value;
            //2.创建正则表达式
            let reg = /^[a-zA-Z][a-zA-Z0-9]{3,15}$/;
            //3.比较正则表达式与文本框的值是否匹配
            if (reg.test(value)) {
                //4.如果匹配就通过,在后面显示打勾的图片,返回true
                document.getElementById("userInfo").innerHTML = "<img src='img/gou.png' width='15'/>";
                return true;
            } else {
                //5.如果不匹配,在后面显示错误信息,返回false
                document.getElementById("userInfo").innerHTML = "用户名格式有误";
                return false;
            }
        }

        /**
         * 判断手机号
         */
        function checkMobile() {
            //1.得到文本框的值
            let value = document.getElementById("mobile").value;
            //2.创建正则表达式
            let reg = /^1[3456789]\d{9}$/;
            //3.比较正则表达式与文本框的值是否匹配
            if (reg.test(value)) {
                //4.如果匹配就通过,在后面显示打勾的图片,返回true
                document.getElementById("mobileInfo").innerHTML = "<img src='img/gou.png' width='15'/>";
                return true;
            } else {
                //5.如果不匹配,在后面显示错误信息,返回false
                document.getElementById("mobileInfo").innerHTML = "手机格式有误";
                return false;
            }
        }
    </script>
</head>

<body>
<!--  onsubmit事件,如果return false就可以阻止表单提交-->
<form action="server" method="post" id="myform" onsubmit="return checkAll()">
    <table class="main" border="0" cellspacing="0" cellpadding="0">
        <tr>
            <td><img src="img/logo.jpg" alt="logo"/><img src="img/banner.jpg" alt="banner"/></td>
        </tr>
        <tr>
            <td class="hr_1">新用户注册</td>
        </tr>
        <tr>
            <td style="height:10px;"></td>
        </tr>
        <tr>
            <td>
                <table width="100%" border="0" cellspacing="0" cellpadding="0">
                    <tr>
                        <!-- 不能为空, 输入长度必须介于 5 和 10 之间 -->
                        <td class="left">用户名:</td>
                        <td class="center">
                            <!--文本框失去焦点进行验证-->
                            <input id="user" name="user" type="text" class="in" onblur="checkUser()"/>
                            <span id="userInfo"></span>
                        </td>
                    </tr>
                    <tr>
                        <!-- 不能为空, 输入长度大于6个字符 -->
                        <td class="left">密码:</td>
                        <td class="center">
                            <input id="pwd" name="pwd" type="password" class="in"/>
                        </td>
                    </tr>
                    <tr>
                        <!-- 不能为空, 与密码相同 -->
                        <td class="left">确认密码:</td>
                        <td class="center">
                            <input id="repwd" name="repwd" type="password" class="in"/>
                        </td>
                    </tr>
                    <tr>
                        <!-- 不能为空, 邮箱格式要正确 -->
                        <td class="left">电子邮箱:</td>
                        <td class="center">
                            <input id="email" name="email" type="text" class="in"/>
                        </td>
                    </tr>
                    <tr>
                        <!-- 不能为空, 使用正则表达式自定义校验规则,1开头,11位全是数字 -->
                        <td class="left">手机号码:</td>
                        <td class="center">
                            <input id="mobile" name="mobile" type="text" class="in" onblur="checkMobile()"/>
                            <span id="mobileInfo"></span>
                        </td>
                    </tr>
                    <tr>
                        <!-- 不能为空, 要正确的日期格式 -->
                        <td class="left">生日:</td>
                        <td class="center">
                            <input id="birth" name="birth" type="text" class="in"/>
                        </td>
                    </tr>
                    <tr>
                        <td class="left">&nbsp;</td>
                        <td class="center">
                            <input name="" type="image" src="img/register.jpg"/>
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
    </table>
</form>
</body>
</html>

小结

  1. 表单提交的时候会激活哪个事件?onsubmit

  2. 能够使用正则表达式进行表单的验证

  3. 创建正则表达式格式:

    new RegExp("正则表达式","匹配模式")
    /正则表达式/匹配模式

    正则表达式的判断方法:

    boolean 正则表达式.test(字符串)

     

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值