代码之家  ›  专栏  ›  技术社区  ›  Ali

javascript regexp问题

  •  1
  • Ali  · 技术社区  · 15 年前

    我有一个regexp,它检查一个值是否至少有10个数字:

    if (foo.match(/^\d{10,}$/))
    {
     // At least 10 digits
    }
    

    但是,我想将验证分为两个步骤,因此首先检查 foo 只有数字,没有其他字符,然后我检查它是否至少有10个数字。

    我可以用 foo.length 但如何更改上面的regexp以检查foo是否只有数字。有什么想法吗?

    6 回复  |  直到 15 年前
        1
  •  2
  •   qid    15 年前

    一种解决方案:将资格从“10或更多”更改为“一个或多个”,从而:

    if (foo.match(/^\d+$/))
    {
     // At least 1 digit
    }
    

    如果可以接受空字符串,请使用 * 而不是 + 匹配“零或更多”。

        2
  •  3
  •   David Hedlund    15 年前

    你已经在检查它是否只有数字。您指定模式必须与字符串开始符 ^ ,后跟至少10位数字,紧接着是字符串结尾 $

    在里面偷走任何非数字,图案就不匹配了

    这意味着,如果您想将测试分为两个步骤,比如说有两个不同的错误消息,您可以首先检查长度,然后仍然使用regexp模式。

        3
  •  0
  •   Darin Dimitrov    15 年前
    var containsOnlyNumbers = /^\d+$/.test(foo);
    
        4
  •  0
  •   mob    15 年前

    如果失败

    foo.match(/\D/)
    
        5
  •  0
  •   jitter    15 年前
    if (foo.match(/^\d+$/)) {
    //all digits
      if(foo.length == 10) {
        //all digits + 10 lenght
        //do whatever
      }
    } else {
      //issue error message
    }
    

    这是一条路。尽管我不明白你为什么要这么做。您自己的regex已经保证了10个字符的长度,并且这10个字符不能是数字以外的任何字符。

        6
  •  0
  •   Justin Johnson    15 年前
    // Invalid: A non-digit is present
    if ( foo.match(/\D/) ) {
       console.warn("Only numbers accepted");
    }
    // Invalid: foo is all digits, but less than 10 digits
    else if ( foo.length < 10 ) {
        console.warn("Minimum 10 digits required");
    }
    // foo is valid
    else {
        console.info("Great success");
    }