• 正则表达式


     

     

    正则及表单验证

    一、  正则的概念

    (一)     正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规则去匹配符合规则的字符。

     

    二、  创建方式

    (一)     使用RegExp这个对象,第一个参数就是我们的模式字符串,第二个参数可选,模式修饰符

    1. Var 变量名 = new RegExp(“正则表达式”,”标志位”);()
    var reg = new RegExp(“study”,”ig”); //i:表示忽略大小写。g:表示全局匹配。

    2. 用常量方式直接声明
    var 变量名 = /正则表达式/标志位
    var reg  = /study/ig;

     

    三、  正则表达式

    (一)     扩展:测试正则表达式test方法

    1. 正则表达式对象名.test(“字符串”):用于检测提供的目标字符串是否包含正则表达式的匹配内容,如果包含返回true,否则返回false

    1)   Var reg = /study/;
    reg.test(“Study”) //false
    reg.test(“study”) //true
    除了匹配相等以外,还可以匹配更复杂的规则
    “good good study,day day up”判断是否包含符合该正则的内容

     

    (二)扩展:测试正则表达式exec方法(争议较大)能将匹配到的内容添加到一个数组中。

    1. 正则表达式对象名.exec(“字符串”):用于在字符串中查找指定正则表达式,如果exec()方法执行成功,则返回包含该查找字符串的相关信息数组。如果执行失败,则返回null。

    1)   Var pattern = /box/i;
    var str = “This is a Box!”;
    alert(pattern.exec(str));

     

    (三) 元字符(三、三、二、三个一)共计11个元字符

    1. 三:{}[]()

    1)   {}:表示括号前面的一个字符(or一组字符)连续出现的次数

    {m}:表示括号前面的一个字符只能 连续出现m次
    {m,}:表示至少出现m次,即m~无限次
    {m,n}:表示至少出现m次,最多出现n次,即m~n次

    2)   []:表示范围

    a)   [u4e00-u9fa5]:表示中文的范围(16进制中字母大小写不区分)(u表示unicode编码)

    b)   [^u4e00-u9fa5]:表示中文

     

    ^表示取反。

    c)   [^a-zA-Z]:表示字母

    d)   [^0-9]:表示数字

    e)   [^  ]:表示空格

     

    3)   ():表示

    2. 三:* + ? :表示前面字符连续出现的次数

     

    1)   * :等同于{0,}表示0~无限次↓

    *前面的一个或一组字符在字符串中连续出现0至无限次。

     

    2)   + :等同于{1,} 表示1~无限次,至少出现1次↓

    +前面的一个字符或一组字符在字符创中连续出现1至无限次。

     

    3)   :等同于{0,1}表示0~1次,最多可出现1次,可以不出现↓

    +前面的一个字符或一组字符在字符创中连续出现0至1次。

     

    3. 二:^  $

    1)   ^ :定(断)头 : 表示必须以^后面的一个字符开头

    2)   $ :定(断)尾 :表示必须以$前面的一个字符结尾

     如:邮箱验证正则表达式  /^w+@[a-z0-9].[a-z]+$/  中没有^和$的话 “哈10232321@qq.com呵呵” 、“---asd0232321@qq.com” 也会通过验证。

     

    (四)     三个一:  .  |  

    1. . : 表示模糊匹配,一个点可以匹配一个任意字符(在未指定次数的情况下默认一个)

     

    2. |:表示

    3. :表示转义字符(转义字符:把具有特殊含义的符号转成一般字符)

    1)   d: 表示数字 [0-9]

    2)   D: 表示非数字[^0-9]

    3)   w: 表示字母、数字、下划线 [a-zA-Z0-9_]

    4)   W: 表示非字母、数字、下划线 [^a-zA-Z0-9]

    5)   s: 表示空白符

    6)   S: 表示非空白符

     

    (五)     扩展:案例分析

     

    1. var pattern = /(google){4,8}/;   //匹配分组里的字符串 4-8 次
    var str = 'googlegoogle';
    alert(pattern.test(str));      //false
    2. var pattern = /(google|baidu|bing)/;   //匹配三种其中一种字符串 var str = 'google'; alert(pattern.test(str));   //true
    3. var pattern = /goosgle/;   //s 可以匹配到空格 var str = 'goo gle'; alert(pattern.test(str)); //true
    4. var pattern = /google/;    // 可以匹配是否到了边界 表示单词边界 var str = 'google'; var str2= 'googleaa googlexx google dsdddd'; alert(pattern.test(str)); //true
    5. var pattern = /gw*gle/;   //w*匹配任意多个所有字母数字_ var str = 'google'; alert(pattern.test(str)); //true
    6. var pattern = /googled*/;   //d*匹配任意多个数字 var str = 'google444'; alert(pattern.test(str)); //true
    7. var pattern = /D{7,}/;   //D{7,}匹配至少 7 个非数字 var str = 'google8'; alert(pattern.test(str)); //false
    8. var pattern = /g[a-zA-Z_]*gle/;   //[a-z]*表示任意个 a-z 中的字符 var str = 'google'; alert(pattern.test(str)); true
    9. var pattern = /g[^0-9]*gle/;   //[^0-9]*表示任意个非 0-9 的字符 var str = 'google'; alert(pattern.test(str));
    10. var pattern = /[a-z][A-Z]+/;   //[A-Z]+表示 A-Z 一次或多次 var str = 'gOOGLE'; alert(pattern.test(str));
    11. var pattern = /g.*gle/; var str = 'google'; alert(pattern.test(str));
    12. var pattern = /^[a-z]+s[0-9]{4}$/i; var str = 'google 2012'; alert(pattern.exec(str));
    13. var pattern = /^[a-z]+/i; var str = 'google 2012'; alert(pattern.exec(str));
    14. var pattern = /^([a-z]+)s([0-9]{4})$/i; var str = 'google 2012'; alert(pattern.exec(str)[0]);   //[0]是父级,代表整个正则表达式匹配到的内容 alert(pattern.exec(str)[1]);  //google父级下的第一个子级 alert(pattern.exec(str)[2]);   //2012父级下的第二个子级

    四、    字符串replace()函数

    (一)     使用replace替换匹配到的数据

    1. var pattern = /Good/ig;
    var str = “good good study!,day day up!”;
    alert(str.replace(pattern,’hard’));    //将Good替换成了hard

     

     

    2. var pattern = /(.*)s(.*)/;
    var str = 'google baidu';
    var result = str.replace(pattern, '$2 $1');   //将两个分组的值替换输出
    document.write(result);
    
    3. var pattern = /8(.*)8/;
    var str = 'This is 8google8';
    var result = str.replace(pattern,'<strong>$1</strong>');  //得到替换的字符串输出
    document.write(result);

     

    五、  字符串match()函数

    (一)     使用match方法获取匹配数组

    1. Var pattern = /good/ig;   //全局搜索
    var str = ‘good good study!,day day up!’;
    alert(str.match(pattern)); 
    alert(str.match(pattern).length);
    
    2. var pattern = /8(.*)8/;   //获取 8..8 之间的任意字符
    var str = 'This is 8google8, dd 8ggg8';
    alert(str.match(pattern));
    alert(RegExp.$1);   //得到第一个分组里的字符串内容

    六、  字符串search()函数

    (一)     使用search来查找匹配数据的下标位置

    1. var pattern = /good/ig;
    var str = ‘good good study!,day day up!’;
    alert(str.search(pattern));  //查找到返回位置,否则返回-1

    (二)      

    第二节:应用

    一、  掌握正则的创建方式

    二、  掌握正则表达式语言

    三、  邮政编码检测

    四、  文件格式检测

    五、  字符串首尾去空格

    六、  邮件格式检测



     

     

    第三节

    一、  手机号检测

    (一)     / 1(3|5|7|8|4)[d]{9}/

    (二)     /1d{10}/

    二、    身份证检测

    /^[1-9]d{5}[1-9]d{3}(0[1-9] |1[0-2])(0[1-9]|(1|2)d|3[01])d{3}(d|x|X)$/

    三、  日期检测

    (一)     Xxxx年xx月xx日  :/(d{4}|d{2})年(d{1,2})月(d{1,2})日/

    2017年3月29日
    17年3月29日

    (二)     12/25/2016  : (d{1,2})/(d{1,2})/(d{4}|d{2})

    (三)     类似"12:59:59"的标准时间: /[d]{1,2}:[d]{1,2}:[d]{1,2}/

    (四)     类似"June 6,2014"的日期 : /([a-z]+) ([d]{1,2}),([d]{2,4})/

    四、  中文检测

    (一)     /[u4e00-u9fa5]/

    五、  用户名检测

    (一)     用户名由 3-10位的字母下划线和数字组成。不能以数字或下划线开头。只能已字母开头。允许全部是字母。

    1. ^[a-zA-z][a-zA-Z0-9_]{2,9}$;
    2. /^[a-z]w{2,9}$/i;

    六、  字符串过滤(首尾空格)

    敏感词过滤案例:

     

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <body>
    <textarea name="table1" cols="30" rows="10"></textarea>
    <input type="button" value="过滤">
    <textarea name="table1" cols="30" rows="10"></textarea>
    
    <script>
        //过滤数字和"大爷"
        var tab1 = document.getElementsByTagName('textarea')[0];
        var tab2 = document.getElementsByTagName('textarea')[1];
        var btn = document.getElementsByTagName('input')[0];
    
        btn.onclick = function(){
            var str = tab1.value;
            var reg = /d|大爷/g;
            var str1 = str.replace(reg,'**');
           tab2.value = str1;
        }
    
    </script>
    </body>
    </html>

     

     

     

    第四节:应用

    一、 表单及AJAX的综合应用

     

    第五节:综合应用

    一、 掌握正则的封装

    二、 掌握综合表单验证

     

    怕什么真理无穷,进一寸有一寸的欢喜。
  • 相关阅读:
    跨域上传图片的尝试过程,最终成功了。哈哈
    老子再也不加什么所谓的技术群了,顶撞群主的话,就被踢了。
    开发使用的插件
    设计原则记录
    程序员修神之路--redis做分布式锁可能不那么简单
    程序员过关斩将--面试官再问你Http请求过程,怼回去!
    程序员修神之路--问世间异步为何物?
    程序员修神之路--提高网站的吞吐量
    程序员过关斩将--你的业务是可变的吗(福利你领了吗)
    程序员修神之路--🤠分布式高并发下Actor模型如此优秀🤠
  • 原文地址:https://www.cnblogs.com/LLLLily/p/7327236.html
Copyright © 2020-2023  润新知