• JavaScript正则表达式:正则表达式中的特殊字符


    正则表达式的组成

    一个正则表达式可以由简单的字符构成,比如 /abc/也可以是简单特殊字符的组合,比如 /ab*c/ 其中特殊字符也被称为元字符,在正则表达式中是具有特殊意义的专用符号,如 ^ $ + 等。

    特殊字符非常多,可以参考:

    MDN:正则表达式 - JavaScript | MDN (mozilla.org)

    jQuery 手册:正则表达式部分

    正则测试工具: 在线正则表达式测试

    这里我们把元字符划分几类学习

    边界

    正则表达式中的边界符(位置符)用来提示字符所处的位置,主要有两个字符

     如果 ^ 和 $ 在一起,表示必须是精确匹配。

    字符类

    字符类表示有一系列字符可供选择,只要匹配其中一个就可以了。所有可供选择的字符都放在方括号内

    1. []  方括号   (就是或者的意思)

    /[abc]/.test('andy')     // true 

     后面的字符串只要包含 abc 中任意一个字符,都返回 true

    2. [-]  方括号内部 范围符 

    /^[a-z]$/.test(c')     // true

    方括号内部加上 - 表示范围,这里表示 a z 26个英文字母都可以

    3. [^]  方括号内部 取反符 

       /[^abc]/.test('andy')     // false
    

    括号内部加上 ^ 表示取反,只要包含方括号内的字符,都返回 false

    注意和边界符 ^ 区别,边界符写到方括号外面。 

    外边是边界符是开头的意思 里面是取反的意思

    上面正则表达式的意思为一个字符不能是大小写字母数字_- 

    4. 字符组合

    /[a-z1-9]/.test('andy')     // true

    方括号内部可以使用字符组合,这里表示包含 a z 26个英文字母和 1 9 的数字可以。

     量词符

    量词符用来设定某个模式出现的次数

     

     * 相当于 >= 0 可以出现0次或者很多次

    + 相当于 >= 1 可以出现1次或者很多次

    ?  相当于 1 || 0

     {3} 就是重复3次 

     {3, }  大于等于3

    {3,16}  大于等于3 并且 小于等于16

    用户名验证

    功能需求:

    1. 如果用户名输入合法 , 则后面提示信息为 用户名合法 , 并且颜色为绿色
    2. 如果用户名输入不合法 , 则后面提示信息为 用户名不符合规范 , 并且颜色为绿色

    案例:用户名验证分析

    分析:

    1.用户名只能为英文字母,数字,下划线或者短横线组成, 并且用户名长度为 6~16.

    2.首先准备好这种正则表达式模式 /$[a-zA-Z0-9-_]{6,16}^/

    3.当表单失去焦点就开始验证.

    4.如果符合正则规范, 则让后面的span标签添加 right .

    5. 如果不符合正则规范 , 则让后面的 span 标签添加 wrong .
    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>Document</title>
    8. <style>
    9. span {
    10. color: #aaa;
    11. font-size: 14px;
    12. }
    13. .right {
    14. color: green;
    15. }
    16. .wrong {
    17. color: red;
    18. }
    19. </style>
    20. </head>
    21. <body>
    22. <input type="text" class="uname"> <span>请输入用户名</span>
    23. <script>
    24. var reg = /^[a-zA-Z0-9_-]{6,16}$/; // 这个模式用户只能输入英文字母 数字 下划线 短横线但是有边界符和[] 这就限定了只能多选1
    25. var uname=document.querySelector(".uname");
    26. var span=document.querySelector("span")
    27. uname.onblur=function(){
    28. if(reg.test(this.value)){
    29. console.log('正确的');
    30. span.className='right'
    31. span.innerHTML='用户名格式输入正确'
    32. }else{
    33. span.className='wrong'
    34. span.innerHTML='用户名格式输入不正确'
    35. }
    36. }
    37. </script>
    38. </body>
    39. </html>
    括号总结
    1. 大括号  量词符 .   里面表示重复 次数
    2. 中括号 字符 集合。匹配方括号中的任意 字符 .(多选一)
    3. 小括号 表示 优先级

    var reg = /^abc{3}$/; // 它只是让c重复三次   abccc

    如果想要abc重复,那就需要使用() 例如 var reg = /^(abc){3}$/; // 它是让abcc重复三次 

    可以在线测试 : 菜鸟工具 - 不止于工具

     预定义类

    预定义指的是某些常见模式的简写方式

     发现菜鸟的正则表达式测试并不好用,下面的是新的测试工具

    在线正则表达式测试 (oschina.net)

     分析:

    1. 手机号码 :  /^ 1[3|4|5|7|8][0-9]{9 }$/
    2. QQ: [1-9 ][0-9]{4,} ( 腾讯 QQ 号从 10000 开始 )
    3. 昵称是中文 :     ^[\u4e00-\u9fa5 ]{2,8}$

    1. window.onload = function() {
    2. var regtel = /^1[3|4|5|7|8]\d{9}$/; // 手机号码的正则表达式
    3. var regqq = /^[1-9]\d{4,}$/; // 10000
    4. var regnc = /^[\u4e00-\u9fa5]{2,8}$/;
    5. var regmsg = /^\d{6}$/;
    6. var regpwd = /^[a-zA-Z0-9_-]{6,16}$/;
    7. var tel = document.querySelector('#tel');
    8. var qq = document.querySelector('#qq');
    9. var nc = document.querySelector('#nc');
    10. var msg = document.querySelector('#msg');
    11. var pwd = document.querySelector('#pwd');
    12. var surepwd = document.querySelector('#surepwd');
    13. regexp(tel, regtel); // 手机号码
    14. regexp(qq, regqq); // qq号码
    15. regexp(nc, regnc); // 昵称
    16. regexp(msg, regmsg); // 短信验证
    17. regexp(pwd, regpwd); // 密码框
    18. // 表单验证的函数
    19. function regexp(ele, reg) {
    20. ele.onblur = function() {
    21. if (reg.test(this.value)) {
    22. // console.log('正确的');
    23. this.nextElementSibling.className = 'success';
    24. this.nextElementSibling.innerHTML = ' 恭喜您输入正确';
    25. } else {
    26. // console.log('不正确');
    27. this.nextElementSibling.className = 'error';
    28. this.nextElementSibling.innerHTML = ' 格式不正确,请从新输入 ';
    29. }
    30. }
    31. };
    32. surepwd.onblur = function() {
    33. if (this.value == pwd.value) {
    34. this.nextElementSibling.className = 'success';
    35. this.nextElementSibling.innerHTML = ' 恭喜您输入正确';
    36. } else {
    37. this.nextElementSibling.className = 'error';
    38. this.nextElementSibling.innerHTML = ' 两次密码输入不一致';
    39. }
    40. }
    41. }

     

  • 相关阅读:
    NMS(openCV API)
    「聊设计模式」之 设计模式的前世今生
    北京大学计算机考研经验分享汇总
    APP自动化之weditor工具
    Atomic原子类详解
    云原生架构相关技术_2.云原生微服务
    公司分支使用5G链路和总部建立IPS加密隧道配置案例
    猿创征文 | C++基础学习一
    java并发编程-实现线程的方法
    QTcpSocket发送数据方法
  • 原文地址:https://blog.csdn.net/weixin_64612659/article/details/128113251