如何为“大于10-000-000小于150-000-000”创建匹配的正则表达式模式?

时间:2019-06-27 03:05:36

标签: regex

我正在尝试

  

09-546-943

在以下正则表达式模式中失败。

  

^^ [0-9] {2,3} [-] {0,1} [0-9] {3} [-] {0,1} [0-9] {3} $

通过标准是
大于10-000-000或010-000-000并且
小于150-000-000

尝试的示例“ 09-546-943”通过。这应该是失败的。
知道如何创建一个使该示例失败而不是通过的正则表达式吗?

3 个答案:

答案 0 :(得分:4)

您可以使用

^(?:(?:0?[1-9][0-9]|1[0-4][0-9])-[0-9]{3}-[0-9]{3}|150-000-000)$

请参见regex demo

该模式部分由this online number range regex generator生成,我将最小值设置为10,将最大值设置为150,然后合并与1-8和{{1 }}(此工具在这里做得不好),在两位数中添加了9,以匹配0?部分和{{1}的可选前导0-[0-9]{3}-[0-9]{3} }} 10-149

请参见regex graph

enter image description here

详细信息

  • -000-000-字符串的开头
  • 150-容器非捕获组的开始,使锚适用于两种选择:
    • ^-可选的(?:,然后是10到99或(?:0?[1-9][0-9]|1[0-4][0-9])之间的数字,后跟0到4的数字,然后是任何数字(100到149)
    • 0-连字符和三位数字重复两次(= 1
  • -[0-9]{3}-[0-9]{3}-或
    • (?:-[0-9]{3}){2}-一个|
  • 150-000-000-非捕获组的结尾
  • 150-000-000-字符串的结尾。

答案 1 :(得分:0)

此表达式或稍作修改的版本可能会起作用:

^[1][0-4][0-9]-[0-9]{3}-[0-9]{3}$|^[1][0]-[0-9]{3}-[0-9]{2}[1-9]$

它也会失败10-000-000150-000-000

如果您感兴趣,请在此demo中对表达式进行说明。

答案 2 :(得分:0)

此模式:

   function storeCurrent(){
 currentCash= document.getElementById("current").value;
  // check if the entered value is number
  if (isNaN(Number(currentCash))) {
    alert("Numbers only");

  } else {
  currentTotal.innerHTML = `Current total is:${currentCash}`;
  }
   }

function checkOnWhat(val) {
  var element = document.getElementById('whatOn');
  if (val == 'Other')
    element.style.display = 'block';
  else
    element.style.display = 'none';
}


function deductFromTotal() {
  var spent = document.getElementById("money_spent").value;
  // check if the entered value is number
  if (isNaN(Number(spent))) {
    alert("Numbers only");

  } else {

    //currentCash = currentCash - spent;
    currentCash -= spent;
    currentTotal.innerHTML = `Current total is:${currentCash}`;
  }
}


/*function listSpending(){
  listOfSpending= document.getElementByName("moneySpent").value;
  listTotalSpent.innerHTML= listOfSpending;
}*/


/*function listSpending(){
    var repeat, spending= []; 
    while (repeat == true){spending.push(getElementById("money_spent").innerHTML,getElementById("whatOn").innerHTML )
      repeat = confirm("Did you spend money on anything else?");
  
      listTotalSpent.innerHTML= listOfSpending;`;
    }
    }*/

匹配范围从 <input type="amount" size=25 Placeholder="How much is in your wallet?" id="current"> <input type="button" value ="confirm" onClick="storeCurrent()"> <br> <h2 id="currentTotal">Current total is: </h2> <input type="amount" size=25 Placeholder="How much did you spend today?" id="money_spent" name="moneySpent" required> <select name="moneySpent" onchange='checkOnWhat(this.value);' required> <option> Groceries <option>Going out <option>Bills <option>Other</select> <input type="text" name="whatOn" id="whatOn" style='display:none;' required /> <p> <input type="button" value="confirm" onClick="deductFromTotal()" ; "listSpending()"> <h3 name="totalSpent" id="totalSpent"> Today's Total Spending: </h3> <div id="listTotalSpent"></div>((0?[1-9])|(1[0-4]))[0-9]-[0-9]{3}-[0-9]{3} (含)。为了使正则表达式简单,您可能需要分别处理极端情况((0)10-000-000149-999-999-取决于是否需要包含或排除它们。

测试here

此正则表达式:

(0)10-000-000

接受150-000-000(空格)或不接受((0?[1-9])|(1[0-4]))[0-9][- ]?[0-9]{3}[- ]?[0-9]{3}

测试here