zoukankan      html  css  js  c++  java
  • 正则表达式

     

     

    正则及表单验证

    一、  正则的概念

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

     

    二、  创建方式

    (一)     使用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的综合应用

     

    第五节:综合应用

    一、 掌握正则的封装

    二、 掌握综合表单验证

     

    怕什么真理无穷,进一寸有一寸的欢喜。
  • 相关阅读:
    237. Delete Node in a Linked List
    430. Flatten a Multilevel Doubly Linked List
    707. Design Linked List
    83. Remove Duplicates from Sorted List
    160. Intersection of Two Linked Lists
    426. Convert Binary Search Tree to Sorted Doubly Linked List
    142. Linked List Cycle II
    类之间的关系
    初始化块
    明确类和对象
  • 原文地址:https://www.cnblogs.com/LLLLily/p/7327236.html
Copyright © 2011-2022 走看看