Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 验证输入是否为有效分数_Javascript_Regex_Regex Negation - Fatal编程技术网

Javascript 验证输入是否为有效分数

Javascript 验证输入是否为有效分数,javascript,regex,regex-negation,Javascript,Regex,Regex Negation,需要验证输入框中的输入是否为三种格式之一的正分数: 整数-1,215,15。。。等等 分数-1/2、3/4、5/16等 整数和分数-1 1/2,3 5/15,12 5/5。。。 等等 但拒绝2 1/2、2 a/2或15/32等 我甚至想不出一个接近的答案。我在想这件事,但还没想好/\d{0,2}(\s\d{1,2}\/\d{1,2})这检查两个整数是否由/字符分隔,前面是带空格的可选整数。它还包括一个单独的检查,将匹配一个单独的整数 ^(?:\d+ )?\d+\/\d+$|^\d+$ 您可以使

需要验证输入框中的输入是否为三种格式之一的正分数:

  • 整数-1,215,15。。。等等
  • 分数-1/2、3/4、5/16等
  • 整数和分数-1 1/2,3 5/15,12 5/5。。。 等等
  • 但拒绝2 1/2、2 a/2或15/32等


    我甚至想不出一个接近的答案。我在想这件事,但还没想好
    /\d{0,2}(\s\d{1,2}\/\d{1,2})

    这检查两个整数是否由
    /
    字符分隔,前面是带空格的可选整数。它还包括一个单独的检查,将匹配一个单独的整数

    ^(?:\d+ )?\d+\/\d+$|^\d+$
    
    您可以使用|匹配一个数字、一个分数、两个数字或一个数字和一个分数

    如果要匹配1或2位数字,可以使用
    \d{1,2}
    而不是
    \d+

    ^\d+(?:\/\d+$|(?: \d+(?:\/\d+)?)?)$
    
    • ^
      字符串的开头
    • \d+
      匹配1+个数字
    • (?:
      非捕获组
      • \/\d+$
        只匹配一个分数(
        /
        和1+个数字,并断言字符串的结尾)
      • |
      • (?:
        非捕获组
        • \d+(?:/\d+)
          匹配空格、1+位和可选的
          /
          和1+位
      • )?
        关闭非捕获组并将其设置为可选
    • 关闭非捕获组
    • $

    • 一个捕获组:()
    • ^开始
    • 美元结束
    • \当处理下面的c时,s代表空格(1+)
    • |对于3个组合:
      • a) 整数+分数
      • b) 分数
      • c) int
    你仍然需要用额外的代码询问捕获组来处理最重要的部分

    要进一步说明这一点。。下面的调整将促进这一点

    ^(\d+\s+(\d+)\/(\d+)|(\d+)\/(\d+)|\d+)$
    
    然后,您必须查看以下任一项:

    • 如果只处理分数(b),则捕获第4组和第5组,或
    • 如果处理整数加分数(a),则捕获第2组和第3组
    因此,为了澄清,对于5 3/4: 捕获组包括:

    1=5 3/4

    2=3

    3=4

    对于2/3: 捕获组包括:

    1=2/3

    4=2

    5=3

    如果你也想询问整数

    ^(\(d+)\s+(\d+)\/(\d+)|(\d+)\/(\d+)|\d+)$
    
    这将分流上面的捕获组2->3,3->4,4->5,5->6。。捕获组2现在将为您提供场景a)的整数。 捕获组1将是场景c)的整数


    你可以看到它的作用。

    为什么要创建一个非捕获组,而不允许空间?该组要允许空间,但前提是分数前面有一个整数。2 15应该像1上的那样吗?
    ^(\(d+)\s+(\d+)\/(\d+)|(\d+)\/(\d+)|\d+)$