regex JS正则表达式排除一系列特定数字

fjaof16o  于 2023-01-31  发布在  其他
关注(0)|答案(3)|浏览(166)

我有一个字段需要收集单个数字

<input type="text" patern="" name="number" required="required" />

现在,value可以是1-9999中的任何值,但有些数字是不允许的,例如

15
21 
532

如果输入了这些数字中的一个,是否有一个正则表达式模式可以用来强制表单提交失败?

p8h8hvxi

p8h8hvxi1#

试试这个正则表达式:

/^(?!(?:15|21|532|0+)$)\d{1,4}$/

如果你仔细看的话,你会发现我把数字0包含在1521532的不允许列表中,原因是正则表达式匹配1到4位数的任何数字,但是你只需要范围1-9999
点击下面的链接查看这个正则表达式的运行演示。
Regex 101
JS Fiddle

9rbhqvlz

9rbhqvlz2#

如果1521532的值为input type="number",请尝试使用String.prototype.match()type="submit"设置为disabled

var input = document.querySelector("input[type=number]")
var label = document.querySelector("[for=number]");
input.oninput = function() {
  var val = this.value;
  var matches = ["15","21","532"];
  var match = matches.indexOf(val) !== -1;
  this.nextElementSibling.disabled = match;
  this.style.color = match ? "red" : "inherit";
  label.innerHTML =  match ? "Invalid number: <mark style=color:red>" 
                             + val + "</mark>" 
                           : "";
}
<form>
  <input type="number" min="1" max="9999" pattern="" name="number" required="required" id="number" />
  <input type="submit" /><br />
  <label for="number"></label>
</form>
sczxawaw

sczxawaw3#

function isValidNumber(num){
  if (isNaN(+num))
    return false;

  var cant_match = [ 15, 21, 532 ];
  return !( cant_match.indexOf(+num) >= 0 );
}

// Example call
isValidNumber( document.querySelector("input[name=number]").value );

很简单:

  • 如果传递给函数的值不是真实的或整数,则isNaN(+num)失败(例如,'32 456'失败)
  • 然后对照坏数数组检查传递的值;如果存在〉= 0的索引,则在数组中找到该数字

相关问题