如果有一个输入字段用于输入序列号:
<div id="sn-check">
<input type="text" value="" name="sn" id="sn" size="30" maxlength="14">
</div>
我的jQuery函数如下所示:
(function(){
var snRegexp = /^[1-9][0-9][0-9][1-2][0-9][0-9][0-9]([0][1-9]|[1][0-2])[0-9]{5}$/;
$("#sn").on("keyup", function() {
var text = $(this).val();
var len = text.length;
if(len == 14){
var isMatch = snRegexp.test(text);
if(isMatch){
$("#sn-check").addClass("fine");
$("#sn-check").removeClass("error")
}else{
$("#sn-check").addClass("error");
$("#sn-check").removeClass("fine");
}
}else{
$("#sn-check").removeClass("error");
$("#sn-check").removeClass("fine");
}
});
}());
好的,这个功能正常。接受以下格式的所有序列号:
例如:25020130612345
如果有四个问题,请扩展此脚本。
我小心翼翼地看到我的例子在工作:
答案 0 :(得分:2)
如果在数组上使用join(separator)
方法,则可以将数组数组更改为模式中的一组可能的id:
var numberArray = [250, 273, 278, 312, 415];
var snRegexp = new RegExp("/^(" + numberArray.join("|") + ")[12]\d{3}(0[1-9]|1[0-2])(?!00000)\d{5}$/");
至于第三个问题,你应该可以在模式中使用前瞻((?!00000)\d{5}
的行。
解释:numberArray.join("|")
将获取数组numberArray
,并返回包含所有数组内容的字符串,以字符串|
分隔。如果您有数组[250, 273, 278, 312, 415]
,则此方法将返回字符串250|273|278|312|415
。在正则表达式中,(250|273|278|312|415)
表示 250,273,278,312或415 。
(?!00000)
是否定前瞻。这意味着即将发布的文本不能等于00000
。我使用否定前瞻排除来自\d{5}
的号码,否则会接受00000
。基本上,(?!00000)\d{5}
表示,只要其后面没有00000,接受任何5位数字。
答案 1 :(得分:2)
答案 2 :(得分:2)
我认为你的javascript的逻辑应该是这样的。
var regex = /(\d{3})([12]\d{3})([01][1-9])(\d{5})/,
input = '25020130612345';
if (input.match(regex)) {
// you can now access each part of the input and validate it as you wish
// e.g. RegExp.$1 will refers to 250, RegExp.$2 will refers to 2013
if (isValidSpecialNumber(RegExp.$1)) {
..
}
..
}