\d,?,{n,m}的相关练习

  1. var str = '小芝麻666';
  2. var reg = /\d/; // 只要字符串中含有数字 即可
  3. console.log(reg.test(str)) // true
  4. console.log(reg.test('werwf2ergdfg'))//true
  5. console.log(reg.test('aefasdfsdfsf'))//false
  6. console.log(reg.test('3453245254')) // true
  7. var reg = /\d?/; // 数字出现0或1次 字符串有没有数字都满足情况
  8. console.log(reg.test('xiaozhima666')) // true
  9. console.log(reg.test('werwf2ergdfg'))//true
  10. console.log(reg.test('aefasdfsdfsf'))//true
  11. console.log(reg.test('3453245254')) // true
  12. var reg = /\d{2,4}/; // 字符串中有没有连续2个或者3个数字 或者4个数字
  13. // /\d\d/ /\d\d\d/ /\d\d\d\d/
  14. console.log(reg.test('xiaozhima666')) // true
  15. console.log(reg.test('werwf2ergdfg'))//false
  16. console.log(reg.test('aefasdfsdfsf'))// false
  17. console.log(reg.test('3453245254')) // true
  18. var reg = /\d{2}/; // 字符串中 有两个连续的数字 即可
  19. console.log(reg.test('xiaozhima666')) // true
  20. console.log(reg.test('werwf2e3rgdfg'))// false
  21. console.log(reg.test('aefasdfsdfsf'))// false
  22. console.log(reg.test('3453245254')) // true

开头^ 和 结尾$ 的相关练习

  • 正则中有 ^ $ : 字符串必须全部满足正则
  • 正则中没有 ^ $ : 只要字符串中有符合这个正则的字符即可 ```javascript var reg = /^\d/; // 要求字符串是 以数字开头的 console.log(reg.test(‘xiaozhima666’)) // false console.log(reg.test(‘werwf2e3rgdfg’))// false console.log(reg.test(‘aefasdfsdfsf’))// false console.log(reg.test(‘3453245254’)) // true

var reg = /^\d{2,3}/; // 要求 字符串 是以 两个或者三个数字开头的 即可 console.log(reg.test(‘1xiaozhima666’)) // false console.log(reg.test(‘22werwf2e3rgdfg’))// true console.log(reg.test(‘432aefasdfsdfsf’))// true console.log(reg.test(‘3453245254’)) // true

var reg = /d{2,3}/; //字符串中 需要有连续两到三个d console.log(reg.test(‘1xiaozhima666’)) // false console.log(reg.test(‘22werwf2e3rgdfg’))// false console.log(reg.test(‘432aefasdfsdfsf’))// false console.log(reg.test(‘3453245254’)) // false

var reg = /\d$/; // 字符串需要是一个 数字 结尾的字符 console.log(reg.test(‘1xiaozhima666’)) // true console.log(reg.test(‘22werwf2e3rgdfg’))// false console.log(reg.test(‘432aefasdfsdfsf’))// false console.log(reg.test(‘3453245254’)) // true

var reg = /\d{4,6}$/; // 以4-6个数字结尾的字符串 console.log(reg.test(‘1xiaozhima666’)) // false console.log(reg.test(‘22werwf2e3rgdfg’))// false console.log(reg.test(‘432aefasdfsdfsf3456’))// true console.log(reg.test(‘3453245254’)) // true

// 正则中有 ^ $ 他就是说字符串必须全部满足正则 // 正则中没有 ^ $ 只要字符串中有符合这个正则的字符即可 // var reg2 = /\d/; var reg = /^\d$/; // 以数字开头 以数字结尾:以一个数字开头 还得以这个数字结尾 console.log(reg.test(‘432aefasdfsdfsf3456’))// false console.log(reg.test(‘3453245254’)) // false console.log(reg.test(‘3333’)) // false console.log(reg.test(‘1’)) // true console.log(reg.test(‘9’))// true console.log(reg.test(‘4’))// true console.log(reg.test(‘5’))// true console.log(reg.test(‘8’))// true

var reg = /^\d{2,3}$/;// 以两到三个数字开头 还得以这两到三个数字结尾 // 也就是说 这个正则只能匹配 两到三位数字的字符串 console.log(reg.test(‘432aefasdfsdfsf3456’))// false console.log(reg.test(‘3453245254’)) // false console.log(reg.test(‘3333’)) // false console.log(reg.test(‘1’)) // false console.log(reg.test(‘9’))// false console.log(reg.test(‘4’))// false console.log(reg.test(‘5’))// false console.log(reg.test(‘8’))// false console.log(reg.test(‘18’))// true

var reg = /^\d+.\d{2}$/; console.log(reg.test(‘123.345’))// false console.log(reg.test(‘123r34’)) // true console.log(reg.test(‘1235345’))//true console.log(reg.test(‘123r345’)) // false console.log(reg.test(‘123 345’)) // false console.log(reg.test(‘123r45’)) // true

var reg = /\d+/;// 要去匹配一个 \ 后边是1到多个d字符 ‘\dd……’ console.log(reg.test(‘qqwewer’))// false console.log(reg.test(‘134543’))// false console.log(reg.test(‘134543d’))// false console.log(reg.test(‘dd’))// false console.log(reg.test(‘\dd’))// true console.log(reg.test(‘\dd’)) //true

  1. <a name="IcIQ4"></a>
  2. #### 中括号[ ]:或的相关练习
  3. - 中括号中出现的字符一般都代表本身的含义
  4. - [] 中的:量词元字符 | . 不再具有特殊含义了;
  5. - \d在中括号中还是0-9
  6. - [] 中的字符 ‘-’ 是按照 对应的的阿斯克码值对应的;
  7. - [] 中要是想让 ‘-’ 代表他自己:建议最好放在末尾
  8. - 例如:/[\w@#?-]+/
  9. - 中括号中不存在多位数
  10. ```javascript
  11. var reg = /[a-c]/;// 就是 有abc中的任意一个字符 即可
  12. console.log(reg.test('aeadfgergdfgd'))//true
  13. console.log(reg.test('234werrfrb')) // true
  14. console.log(reg.test('acaca')) // true
  15. console.log(reg.test('bbbbb')) // true
  16. // [] 中的字符 ‘-’ 是按照 对应的的阿斯克码值对应的
  17. // var reg = /[c-a]/ ;是不可以的会报错
  18. // var reg = /[C-a]/ ;// ASCII:67(大C)-97(小a)
  19. var reg = /[c\-a]/ ;// c 或者 ‘-’ 或者 a ;这里的‘-’没有意义了,只是一个‘-’
  20. var reg = /[.]/;// 在 [] 中的点 就代表 点儿本身
  21. //=>[] 中的:量词元字符 | . 不再具有特殊含义了;
  22. var reg = /^[1.2]$/;// 该正则 只能匹配一个字符; 1或.或2
  23. console.log(reg.test('1.2'))//false;
  24. console.log(reg.test('1q2'))//false
  25. console.log(reg.test('1')) // true
  26. console.log(reg.test('2'))// true

点的相关练习

  1. var reg = /^1.2$/;// 该正则 1开头 2结尾 中间有一个任意字符
  2. console.log(reg.test('1.2'))//;true
  3. console.log(reg.test('1q2'))//true
  4. console.log(reg.test('1')) // false
  5. console.log(reg.test('2'))// false

转义的相关练习

  • 正则中的转义: 就是把 正则中 有特殊含义的字符 转义字符本身
  • 字符串中的转义: 就是把 字符串中 有特殊含义的字符 转义成字符本身; ```javascript var reg = /^1.2$/;// 该正则 1开头 2结尾 中间有一个点 console.log(reg.test(‘1.2’))//;true console.log(reg.test(‘1q2’))//false console.log(reg.test(‘1’)) // false console.log(reg.test(‘2’))// false */

// 转义 一个是正则中的转义 一个是字符串中的转义 //正则中的转义 就是把 正则中 有特殊含义的字符 转义字符本身 //字符串中的转义 就是把 字符串中 有特殊含义的字符 转义成字符本身;’ “ \

  1. <a name="zmzDG"></a>
  2. ### 竖|:或的相关练习
  3. - 直接x|y会存在很乱的优先级问题,一般我们写的时候都伴随着小括号进行分组,因为小括号改变处理的优先级 =>小括号:分组
  4. ```javascript
  5. var reg = /18|19/;// 含有 18或者19即可
  6. console.log(reg.test('18'))
  7. console.log(reg.test('19'))
  8. console.log(reg.test('189'))
  9. console.log(reg.test('1819'))
  10. console.log(reg.test('819'))
  11. console.log(reg.test('1918'))
  12. console.log(reg.test('118'))
  13. var reg = /^18|19/;// 18开头的 或者 含有19的 就是true;
  14. console.log(reg.test('18')) // true
  15. console.log(reg.test('19')) // true
  16. console.log(reg.test('189'))//true
  17. console.log(reg.test('1819'))//true
  18. console.log(reg.test('819'))//true
  19. console.log(reg.test('1918'))//true
  20. console.log(reg.test('118')) // false
  21. console.log(reg.test('119')) // true
  22. var reg = /^18|19$/;// 18开头的 或者 以19结尾的 就是true;
  23. console.log(reg.test('18')) // true
  24. console.log(reg.test('19')) // true
  25. console.log(reg.test('189'))//true
  26. console.log(reg.test('1819'))//true
  27. console.log(reg.test('819'))//true
  28. console.log(reg.test('1918'))//false
  29. console.log(reg.test('118')) // false
  30. console.log(reg.test('119')) // true
  31. // 编写一个正则 只有18 或者 19 匹配的结果是 true; 其他都是false;
  32. var reg = /^(18|19)$/;// 只能匹配18或者19
  33. console.log(reg.test('18')) // true
  34. console.log(reg.test('19')) // true
  35. console.log(reg.test('189'))//false
  36. console.log(reg.test('1819'))//false
  37. console.log(reg.test('819'))//false
  38. console.log(reg.test('1918'))//false
  39. console.log(reg.test('118')) // false
  40. console.log(reg.test('119')) // false
  41. var reg = /^[18|19]$/;// 只能匹配 1 8 | 1 9 五个中的一位
  42. var reg = /^1[89]$/; // 以1开头 后边是 8或者9 结尾;
  43. var reg = /^[18]9$/; // 以1或者8开头 9结尾
  44. var reg = /^1(8|9)$/;// 以1开头 后边是 8或者9 结尾;

4、应用练习

-1)、编写一个正则 可以匹配用户输入的手机号是否合法(宽泛)

规则:

  • 1、以1开头
  • 2、11位数字
  • 3、第二位不能012

    1. let rex = /^1[3-9]\d{9}$/

    -2)、编写一个正则 可以匹配有效数字

    规则:

  • 1、可能出现 + - 号,也可能不出现 : [+-]?

  • 2、一位0-9都可以,多位首位不能是0 :(\d|([1-9]\d+))
  • 3、小数部分可能有可能没有,一旦有后面必须有小数点+数字: (.\d+)?

    1. let reg = /^[+-]?(\d|([1-9]\d+))(\.\d+)?$/;

    -3)、编写一个正则 可以验证真实姓名的

    规则:

  • 1、汉字 : /^[\u4E00-\u9FA5]$/

  • 2、名字长度 2~10位
  • 3、可能有译名 ·汉字 : (·[\u4E00-\u9FA5]{2,10}){0,2}

    1. let reg = /^[\u4E00-\u9FA5]{2,10}(·[\u4E00-\u9FA5]{2,10}){0,2}$/;

    -4)、编写一个正则 可以匹配 18-65 之间的年龄

    规则:

  • 1、整数

  • 18-19 ;20-59 : [2-5]\d ; 6[0-5]

    1. let reg = /^(1[89]|[2-5]\d|6[0-5])$/;

    -5)、编写一个正则 可以匹配邮箱

    规则一:邮箱的名字由“数字、字母、下划线、-、.”几部分组成,但是-/.不能连续出现也不能作为开始

  • 1、开头是数字字母下划线(1到多位)

  • 2、还可以是 -数字字母下划线 或者 .数字字母下划线,整体零到多次=> \w+((-\w+)|(.\w+))*

规则二:

  • 1、@后面紧跟着:数字、字母 (1-多位)=> @[A-Za-z0-9]+
  • 2、对@后面名字的补充=> ((.|-)[A-Za-z0-9]+)*
  • 3、匹配最后的域名(.com/.cn/.org/.edu/.net…)=> .[A-Za-z0-9]+

    1. let reg = /^\w+((-\w+)|(\.\w+))*@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;

    -6)、编写一个正则 可以匹配身份证号码

    规则:

  • 1、一共18位

  • 2、最后一位可能是X
  • 3、身份证前六位:省市县(第一位不能是0)
  • 4、出生的年 19 或 20 :((19|20)\d{2})
  • 5、月份 01-12 :(0[1-9]|1[0-2])
  • 6、日期 01-31 :(0[1-9]|[1-2]\d|3[01])
  • 7、最后一位 => X或者数字 :(\d|X)
  • 8、倒数第二位 => 偶数 女 奇数 男 :(\d{2}(\d))

    1. let reg = /^[1-9]\d{5}((19|20)\d{2})(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[01])\d{3}(\d|X)$/i;

    -7)、编写一个正则 可以匹配用户输入的密码是否符合规则;

    规则:

  • 1、8-18位

  • 2、既有大写字母 又有小写字母 还得有数字 ```javascript function judge(str) { if (str.length < 8 || str.length > 18) return false if (!/[A-Z]/.test(str)) return false if (!/[a-z]/.test(str)) return false if (!/\d/.test(str)) return false return true; }

let reg = /^(?=.\d)(?=.[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,18}$/

//=> 必须有特殊字符时 let reg = /^(?=.\d)(?=.[a-z])(?=.[A-Z])(?=.[#?&-])[a-zA-Z0-9#?&-]{8,18}$/

//=> 密码是由8-18位的数字或者字母组成 不要求所有类型都存在 let reg = /^[0-9A-Za-z]{8,18}$/;

  1. <a name="Il1bW"></a>
  2. ### 案例:把时间字符串进行处理
  3. ```javascript
  4. //=> 要求传入实参格式任意:xx-xx xx:xx ;但索引对应为: 0年 1月 2日 3时 4分 5秒
  5. String.prototype.formatTime = function formatTime(template) {
  6. // 1.根据操作的时间字符串获取年月日小时分钟秒等信息
  7. let arr = this.match(/\d+/g).map(item => {
  8. return item.length < 2 ? '0' + item : item;
  9. });
  10. // 2.解析格式化的模板,找到对应的时间,替换模板中的内容
  11. template = template || '{0}年{1}月{2}日 {3}时{4}分{5}秒';
  12. return template.replace(/\{(\d+)\}/g, (_, group) => {
  13. return arr[group] || "00";
  14. });
  15. };
  16. let time = "2020-4-8 16:36:8";
  17. time = time.formatTime('{0}年{1}月{2}日');
  18. console.log(time); //=> 2020年04月08日

案例:单词首字母大写

  1. let str = "good good study,day day up!";
  2. let reg = /\b([a-zA-Z])[a-zA-Z]*\b/g;
  3. //=>函数被执行了六次,每一次都把正则匹配信息传递给函数
  4. //=>每一次ARG:["good","g"] ["good","g"] ["study","s"]...
  5. str = str.replace(reg,(...arg)=>{
  6. let [content,$1]=arg;
  7. $1=$1.toUpperCase();
  8. content=content.substring(1);
  9. return $1+content;
  10. });
  11. console.log(str); //=>"Good Good Study,Day Day Up!"

案例:处理URL参数

  1. // 获取URL中的传参信息(可能也包含HASH值)
  2. String.prototype.queryURLParams = function queryURLParams() {
  3. let obj = {};
  4. // 哈希值值的处理
  5. this.replace(/#([^?=#&]+)/g, (_, group) => obj['HASH'] = group);
  6. // 问号传参信息的处理
  7. this.replace(/([^?#=&]+)=([^?#=&]+)/g, (_, group1, group2) => {
  8. obj[group1] = group2;
  9. });
  10. return obj;
  11. };
  12. let str = 'http://www.xxxxxxxxx.cn/?lx=1&from=weixin&name=xxx#video';
  13. let obj = str.queryURLParams();
  14. console.log(obj); //=> {HASH: "video", lx: "1", from: "weixin", name: "xxx"}

案例:实现千分符处理

  1. String.prototype.millimeter = function millimeter() {
  2. return this.replace(/\d{1,3}(?=(\d{3})+$)/g, value => {
  3. return value + ',';
  4. });
  5. };
  6. let str = "2312345638";
  7. str = str.millimeter();
  8. console.log(str); //=>"2,312,345,638"