ホームページ  >  に質問  >  本文

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

如题。语言是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都不能匹配上。
请问我应该怎么做?

PHP中文网PHP中文网2750日前463

全員に返信(3)返信します

  • 巴扎黑

    巴扎黑2017-04-10 15:23:41

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

    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();
      }
    }
    

    参考这里

    返事
    0
  • 怪我咯

    怪我咯2017-04-10 15:23:41

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

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

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

    返事
    0
  • 高洛峰

    高洛峰2017-04-10 15:23:41

    采用暴力方式

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

    哈哈

    正解

    var regExp1 = /^(\d)(?:\1)$/;
    

    返事
    0
  • キャンセル返事