正则表达式匹配两个不同的数字。

发布于 2022-09-01 12:15:24 字数 635 浏览 12 评论 0

如题。语言是js。细节是输入一个2位数,要求匹配两个数字不同的情况。
我是打算这么做的。

var regExp1 = /^(\d{1})[^\1]$/;
var regExp2 = /^\d{2}$/;
if(regExp2.test(elem) == false){
  alert("请输入一个2位数!");
  document.getElementById("txt1").select();
}else {
  if (regExp1.test(elem) == false){
    alert("您输入的格式不正确!");
    document.getElementById("txt1").select();
  }
}

但是用[^\1]是失败的,因为不管是22还是23都能匹配上。
然后我去看了mdn的资料想用

var regExp1 = /^(\d{1})(?!\1)$/;

这样也还是失败,无论22还是23都不能匹配上。
请问我应该怎么做?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

情愿 2022-09-08 12:15:24

思路应该反过来,匹配两个数字相同的情况

var regExp1 = /^(\d)\1$/;
var regExp2 = /^\d{2}$/;
if(regExp2.test(elem) == false){
  alert("请输入一个2位数!");
  document.getElementById("txt1").select();
}else {
  if (regExp1.test(elem) == true){
    alert("您输入的格式不正确!");
    document.getElementById("txt1").select();
  }
}

补充:
我想了一下觉得可以用负向前瞻零宽断言来实现:
如何用正则匹配一个6位数,前两位数字相同,后两位数字相同,中间两位不同

var regExp1 = /^(\d)\1(\d)(?!\2)\d(\d)\3$/;
var regExp2 = /^\d{6}$/;
if(regExp2.test(elem) == false){
  alert("请输入一个2位数!");
  document.getElementById("txt1").select();
}else {
  if (regExp1.test(elem) == false){
    alert("您输入的格式不正确!");
    document.getElementById("txt1").select();
  }
}

参考这里

于我来说 2022-09-08 12:15:24

楼上答案都OK。
我想这么做,

var regex = /(\d)(?!\1)(?:\d)/;
regex.test("2a"); // false
regex.test("22"); // false
regex.test("23"); // ture

clipboard.png

题主后续的zhui追问我可能不懂。谢谢。

天邊彩虹 2022-09-08 12:15:24

采用暴力方式

var regExp1 = /^11|22|33|44|66|77|88|99|00$/;

哈哈

正解

var regExp1 = /^(\d)(?:\1)$/;
岁月如刀 2022-09-08 12:15:24

时隔5年再来问下各位大佬?,负向前瞻零宽断言我明白了,正确答案是/^(\d)(?!\1)\d$/,但是为什么/^(\d{1})[^\1]$/这个表达式不能满足要求呢

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文