首页 > 解决方案 > 具有某些条件的数字范围的正则表达式

问题描述

我正在使用 javascript 创建一个项目。我想在我的项目中实现正则表达式以进行验证。验证就像增加订单的数字范围这是我的要求。

1-56  --------Pass
15 -----------Pass
1-5-9 --------Fail
asd988 -------Fail

50-49 ------- Fail

我正在尝试使用这个

^[0-9]+-[0-9]+$

它不适合我

更新:更改是用户可以添加多个值,例如:

1-56,56,3

标签: javascriptregex

解决方案


您可以匹配由单个或两个数字组成的字符串,捕获数字并在有两个数字时比较它们。仅在不匹配或第一个数字小于第二个数字时才返回 false:

const rx = /^(\d+)(?:-(\d+))?$/
const isValid = (string) => {
  const m = rx.exec(string);  
  if (m && !m[2]) {
    return true;
  } else if (m && parseInt(m[2], 10) > parseInt(m[1], 10)) {
    return true;
  } else { 
    return false; 
  }
}

const strs = ['1-56,56,3', '1-56', '15', '1-5-9', 'asd988', '50-49'];

for (let s of strs) {
   console.log( s, s.split(",").every(x => isValid(x)) )
   
}

/^(\d+)(?:-(\d+))?$/则表达式匹配:

  • ^- 字符串的开始
  • (\d+)- 第一组:一位或多位数字
  • (?:-(\d+))?- 一个可选的非捕获组匹配 1 或 0 次出现
    • -- 一个-字符
    • (\d+)- 第 2 组:一位或多位数字 - $- 字符串结尾。

推荐阅读