我有一个字段需要收集单个数字
<input type="text" patern="" name="number" required="required" />
现在,value可以是1-9999中的任何值,但有些数字是不允许的,例如
15 21 532
如果输入了这些数字中的一个,是否有一个正则表达式模式可以用来强制表单提交失败?
p8h8hvxi1#
试试这个正则表达式:
/^(?!(?:15|21|532|0+)$)\d{1,4}$/
如果你仔细看的话,你会发现我把数字0包含在15,21,532的不允许列表中,原因是正则表达式匹配1到4位数的任何数字,但是你只需要范围1-9999。点击下面的链接查看这个正则表达式的运行演示。Regex 101JS Fiddle
0
15
21
532
1-9999
9rbhqvlz2#
如果15、21、532的值为input type="number",请尝试使用String.prototype.match()将type="submit"设置为disabled
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>
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)
3条答案
按热度按时间p8h8hvxi1#
试试这个正则表达式:
如果你仔细看的话,你会发现我把数字
0
包含在15
,21
,532
的不允许列表中,原因是正则表达式匹配1到4位数的任何数字,但是你只需要范围1-9999
。点击下面的链接查看这个正则表达式的运行演示。
Regex 101
JS Fiddle
9rbhqvlz2#
如果
15
、21
、532
的值为input type="number"
,请尝试使用String.prototype.match()
将type="submit"
设置为disabled
sczxawaw3#
很简单:
isNaN(+num)
失败(例如,'32 456'失败)