【Python全栈-JavaScript】JavaScript正则表达式

 JavaScript正则表达式

正则表达式:目的在于处理字符串,查找,验证,修改,替换

参考:http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp

正则表达式的一些基本概念总结:

1.元字符:(.,\w,\W,\d,\D,\s,/S,^,$,)

2、分组符([],(),{});

 

3、修饰符(i,g,m);

 

4、量词(*,?,+,-,{n,m},?=n,?!=n);

为什么要学习和使用正则表达式?

 

元字符

元字符之反义^ 和 转义\

 

"zhejiang ningbo2019".match(/[^a-z]/g)    // [" ", "2", "0", "1", "9"]

"zhejiang^ningbo2019".match(/[\^a-z]/g)  // ["z", "h", "e", "j", "i", "a", "n", "g", "^", "n", "i", "n", "g", "b", "o"]

"zhejiang^ningbo2019".match(/[^\^]/g) // ["z", "h", "e", "j", "i", "a", "n", "g", "n", "i", "n", "g", "b", "o", "2", "0", "1", "9"]

 

 

 

练习:使用正则表达式 匹配形如 YYYY-MM-DD 格式的日期

 

量词 

 

6.其它

1) 匹配元字符( [ { \ ^ $ | ) ? * + .”,需要用“\”转义。

   例如:匹配“.”,正则表达式为“\.”。

2) 贪婪量词与惰性量词

惰性量词仅仅在贪婪量词后面加个“?”。

用贪婪量词进行匹配时,它首先会将整个字符串当成一个匹配,如果匹配成功就退出,如果不匹配,就截去最后一个字符进行匹配;如果不匹配,继续将最后一个字符截去进行匹配,直到有字符匹配为止。

用惰性量词进行匹配时,它首先将第一个字符当成一个匹配,如果成功则退出;如果失败,则测试前两个字符,依次增加,直到遇到合适的匹配为止 。

例如:“\d+”是贪婪量词,而“\d+?”是非贪婪(惰性)量词。

 
3) 子匹配() 分组

内部的分组匹配,用“()”标示一个分组。

子匹配的每个分组都被放在一个特殊的地方以备将来使用,这些被存储的值是分组中的特殊值,称之为反向引用。

例如:验证输入的是日期,再提取到月份,其正则表达式为“^\d{4}\-(\d{2})\-\d{2}$”。

 
4) 正向前瞻和负向前瞻

正向前瞻:(?<=字符)或(?=字符)

注意:一定要有等于才行。

 
负向前瞻(?<!字符)或(?!字符)

注意:一定要有不等于才行。

 
也就是说,我们可以自己制定匹配的边界在哪里,这在字符串提取时常用。

 
示例:

例1,我们取“#”之前的字符,但是不包括“#”,其正则表达式:[\w]+(?=#)

例2,我们取不在“#”之前的字符,但是不包括“#”,其正则表达式: [\w]+(?!#)

例3,我们取“<>”之间的字符,但是不包括“<>”,其正则表达式: (?<=<)[\w]+(?=>)

 
正则表达式常见用法

1.数字

1)正整数: ^[1-9][0-9]*$

2)非正整数: ^((-[1-9][0-9]*)|(0))$

3)负整数:^-[1-9][0-9]*$

4)整数: ^(0|-?[1-9][0-9]*)$

5)非负浮点数:^\d+(\.\d+)?$

 
2.字母

1)英文字符串:^[A-Za-z]+$

2)英文大写串:^[A-Z]+$

3)英文小写串:^[a-z]+$

4)英文字符数字串:^[A-Za-z0-9]+$

5)英文数字加下划线串:^\w+$

 
3.其它

1.E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$

2.URL:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$

3.邮政编码:^[1-9]\d{5}$

4.中文:^[\u4e00-\u9fA5]+$

5.电话号码:^((\d2,3\d2,3)|(\d{3}\-))?(0\d2,30\d2,3|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$

6.手机号码:^1\d{10}$

7.首尾空格:(^\s+)|(\s+$)

8.身份证:^(\d{15}|\d{18})$      (注:中国的身份证为15位或18位)

9.账号:^[a-zA-Z]\w{4,15}$      (注:字母开头,允许5-16字节,允许字母数字下划线)

10.IP:^([1-9]\d{0,1}|1\d{2}|2[0-4]\d|25[0-5])(\.([1-9]\d{0,1}|1\d{2}|2[0-4]\d|25[0-5])){3}$   (IP是由大于等于0且小于等于255的数字、“.”组成的,验证每个数字分项再和“.”拼接就可以了)

 

 

 

 

 

 

作业: 163邮箱注册验证

https://reg.mail.163.com/unireg/call.do?cmd=register.entrance&from=email163&regPage=163

重点总结:密码验证,邮箱验证,手机号验证,用户名验证,网址验证,ip验证

案例:验证用户名、密码、邮箱、身份证

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Regular Expression test</title>
</head>
<body>

用户名:(4-16位,字母、下划线、数字,减号) <br/>
<input type="text" id="un" placeholder="4-16位">
<input type="button" value="test" onclick="userName()">
<span id="one"></span>
<br/>
<hr/>
密码:(最少6位,至少包括一个大写字母、一个小写字母、一个数字、一个特殊字符) <br/>
<input type="text" id="pw">
<input type="button" value="test" onclick="password()">
<span id="two"></span>
<br/>
<hr/>
邮箱:(xxx@xx.xxx)<br/>
<input type="text" id="em">
<input type="button" value="test" onclick="email()">
<span id="three"></span>
<br/>
<hr/>
身份证号:18位,最后一位可以是数字或字母<br/>
<input type="text" id="idn">
<input type="button" value="test" onclick="idNumber()">
<span id="four"></span>

<script type="text/javascript">
    function userName() {
        var reg = /^\w{4,16}$/;
        if (!reg.test(document.getElementById("un").value))
            document.getElementById("one").innerHTML = "不正确";
        else
            document.getElementById("one").innerHTML = "正确";
    }

    function password() {
        var reg = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*?[#?!@$%^&*-]).{6,}$/;

        if (!reg.test(document.getElementById("pw").value))
            document.getElementById("two").innerHTML = "不正确";
        else
            document.getElementById("two").innerHTML = "正确";
    }

    function email() {
        // 1234567@qq.com
        // zheshi123xxx@sina.com
        // haha520@163.com
        // xjt21760446@gmail.com
        // ******@hotmail.com
        // ******@outlook.com
        // ******@msn.com
        // ******@msn.cn

        var reg = /^\w+@[a-zA-Z0-9]{2,10}(?:\.[a-z]{2,4}){1,3}$/;

        if (!reg.test(document.getElementById("em").value))
            document.getElementById("three").innerHTML = "不正确";
        else
            document.getElementById("three").innerHTML = "正确";
    }

    function idNumber() {
        var reg = /^\d{17}[A-z|0-9]{1}$/;

        if (!reg.test(document.getElementById("idn").value))
            document.getElementById("four").innerHTML = "不正确";
        else
            document.getElementById("four").innerHTML = "正确";
    }
</script>
</body>
</html>
View Code

 

posted @ 2019-07-01 21:00  XJT2019  阅读(331)  评论(0编辑  收藏  举报