Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.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 - Fatal编程技术网

Javascript 验证数字的范围

Javascript 验证数字的范围,javascript,regex,Javascript,Regex,我试图验证一个逗号分隔的数字列表1-384唯一(不重复) i、 e 1,2,3,5,6,7,9有效 1-3,5-7,9有效 2,2,6是无效的 2、无效 1、2、3、4、15、6、7、385无效,因为最后一个数字大于384 我尝试了以下正则表达式模式,但还不够: /^(?!.*(\b(?:[1-9]|[1-2]\d|3[0-1])\b).*\b\1\b)(?:[1-9]|[1-2]\d|3[0-1])(?:,(?:[1-9]|[1-2]\d|3[0-1]))*$/ 对于仅使用正则表达式来说

我试图验证一个逗号分隔的数字列表1-384唯一(不重复)

i、 e

  • 1,2,3,5,6,7,9有效
  • 1-3,5-7,9有效
  • 2,2,6是无效的
  • 2、无效
  • 1、2、3、4、15、6、7、385无效,因为最后一个数字大于384
我尝试了以下正则表达式模式,但还不够:

/^(?!.*(\b(?:[1-9]|[1-2]\d|3[0-1])\b).*\b\1\b)(?:[1-9]|[1-2]\d|3[0-1])(?:,(?:[1-9]|[1-2]\d|3[0-1]))*$/

对于仅使用正则表达式来说,这不是一个很好的用例。除了使用正则表达式之外,还需要应用一些逻辑

例如

  • 使用
  • 然后检查它是否是介于
    -
    之间的范围表达式
  • 然后验证各个表达式以检查唯一性和边界
    • 你可以试试这个-

      函数有效(str){
      设下限=1,上限=384;
      //删除不必要的空间
      str=str.replace(/\s/g');
      //用逗号(,)拆分字符串
      常量nums=str.split(',');
      const track={};
      //访问数字
      for(常量num的数量){
      //检查是否有任何数字包含破折号(-)
      如果(/\-/.test(num)){
      //如果有破折号,则按破折号拆分,得到上下限。
      常量[l,u]=num.split('-').map(x=>x*1);
      //从下界到上界的访问
      for(设i=l;i'+(isValid(str)?'Valid':'Invalid');
      }

      .as控制台包装{min height:100%!important;top:0}
      一个过滤器和设置可能更容易看到

      “1-385”也是假的吗

      const isValid=str=>{
      str=str.replace(/\s+/g,“”)
      常量rng=str.split(“,”).filter(项=>{
      如果(item==null | | item===“”)返回false
      如果(isNaN(项目)){
      常量[from,to]=项拆分('-'))
      从>0返回+从<385&&&
      +至>0&&+至<385
      }
      项目=+项目
      返回项>0&&项<385;
      });
      返回[…新集合(rng)]。连接(“,”==str;
      };
      常量arr=[“1,2,3,5,6,7,9”,
      "1-3, 5-7, 9",
      "1-385",
      "1-384",
      "2, 2, 6",
      "2,",
      "1, 2, 3, 4, 15, 6, 7, 384",
      "1, 2, 3, 4, 15, 6, 7, 385",
      "0, 2, 3"
      ]
      const res=arr.map(str=>({[str]:isValid(str)}));
      
      console.log(res)
      问题出在哪里?另外,检查一个数字是否属于某个特定范围,以及一个数字是否重复,最好用一点JavaScript代码来实现。
      1-3,5-7,9
      在JS中不是逗号分隔的数字列表。这可能是
      -2,-2,9
      “1-3”,“5-7”,9
      是什么使
      2,
      无效,逗号?@mplungjan,是的,逗号使其无效。