正则表达式 test() 输出异常

在一个对 输入框输入的 ip地址做正则验证的时候,遇到这么一个问题:

    明明输入的ip地址是正确的,打印也是正确的,在走之后的逻辑时,却总是执行错误的代码。
var ipNorm = (rule, value, callback) => {
      let reg =
        /^(1[0-9]{2}|2[0-4][0-9]|25[0-5]|(\d){1,2})\.(1[0-9]{2}|2[0-4][0-9]|25[0-5]|(\d){1,2}|0)\.(1[0-9]{2}|2[0-4][0-9]|25[0-5]|(\d){1,2}|0)\.(1[0-9]{2}|2[0-4][0-9]|25[0-5]|(\d){1,2}|0)$/;
        console.log(reg.test(value),value);
      if (reg.test(value)) {
        callback();
      } else {
        console.log("难道失败了", reg.test(value));
        callback(new Error("请输入正确的IP地址"));
      }
    };

打印是正确,但返回是错误

原因:

我的正则表达式,最后加上了 g,也就是全局匹配,并且我在使用 返回值之前还打印了一下。

原本。text() 方法仅会进行一次匹配,并返回布尔值。但我 写上 g 之后,他就会开始进行对字符串的全局匹配,第一个 匹配的开始索引位置是 0,返回匹配结果 true,此时 索引指针  变为 11,也就是匹配结束的位置,和下次开始的位置。  我在打印时又执行了一次,导致 索引 11之后 匹配不到,所以返回  false,此时索引指针 再次变为  0.  所以再次打印的时候,返回值  又会变成  true。

解决方法:

方法一: 删除  正则表达式的  g;
方法二:删除判断之前的 打印。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值