我有一个包含maxlength 4的文本框,如果用户按顺序输入数字,则需要抛出错误。
示例:以下是几个需要阻止的示例:
1234,4567,5678等
它可以接受1233,4568等
我在Jquery或JavaScript中期待这种情况。
任何帮助将不胜感激
代码:我想使用以下格式的代码:
$.validator.addMethod("Pin", function(b) {
var a = true;
**a = (/^([0-9] ?){4}$/i).test(b);**
return a
}, "");
我们可以替换粗体条件。
答案 0 :(得分:2)
最简单的解决方案是使用以下代码
/**
* The sequential number would always be a subset to "0123456789".
* For instance, 1234, 4567, 2345, etc are all subset of "0123456789".
* To validate, this function uses 'indexOf' method present on String Object.
* you can read more about 'indexOf' at https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf
*/
$.validator.addMethod("Pin", function(b) {
var numbers = "0123456789";
//If reverse sequence is also needed to be checked
var numbersRev = "9876543210";
//Returns false, if the number is in sequence
return numbers.indexOf(String(b)) === -1 && numbersRev.indexOf(String(b)) === -1;
}, "");
只有在需要反向序列验证时才需要变量numbersRev
的条件
答案 1 :(得分:0)
你可以这样做:
//with array
var numArray = [1234, 1243];
for (var i = 0; i < numArray.length; i++) {
checkIfSequential(numArray[i]);
}
//with string
var numberGiven = 1234;
checkIfSequential(numberGiven);
function checkIfSequential(num) {
var newNum = num + ''
newNum = newNum.split('');
console.log(num + ': ' + newNum.every((num, i) => i === newNum.length - 1 || num < newNum[i + 1]));
}
答案 2 :(得分:0)
我明白你的观点, 为什么不在HTML本身设置输入字段的最大长度,然后将 keyup 事件绑定到输入框以触发验证?
例如:
<input type="text" maxlength="4" onkeyup="validateMe()" id="key"/>
<script>
validateMe = function(){
if(document.getElementById("key").value == "1234"){
alert("yay! Key accepted!!");
}
};
</script>
答案 3 :(得分:0)
您可以简单地将引脚分成单独的数字,并迭代它们以确保至少有一个部分不按顺序排列(即+2
或更多的差异):
$.validator.addMethod("Pin", function(value, element) {
var digits = value.split(''),
invalid = true;
// Iterate through pairs of values
// As long as one comparison is not consecutive, the PIN is valid
for(var i = 0; i < digits.length - 1; i++) {
if (parseInt(digits[i]) - parseInt(digits[i+1]) > 1) {
invalid = false;
break;
}
}
return !invalid;
}, "");
如果您还想要适应下降序列的情况,即9876
,只需检查一个数字与另一个数字之间的绝对差异,即:
Math.abs(parseInt(digits[i]) - parseInt(digits[i+1])) > 1
概念验证逻辑:
// Test values
var values = ['1234', '1235', '4321', '5321'];
for(var v = 0; v < values.length; v++) {
var value = values[v],
digits = value.split(''),
invalid = true;
for(var i = 0; i < digits.length - 1; i++) {
if (Math.abs(parseInt(digits[i]) - parseInt(digits[i+1])) > 1) {
invalid = false;
break;
}
}
console.log('PIN: ' + value + '. Valid? ' + !invalid);
}
答案 4 :(得分:0)
为了满足4
位最大长度的要求。
我们根据OP约束[1234, 2345, 3456, 4567, 5678, 6789]
枚举所有可能的顺序数字,然后使用input
参数对其进行检查。
const sequentialDigits = (input) => {
const allSeqNumsArr = [1234, 2345, 3456, 4567, 5678, 6789];
return allSeqNumsArr.filter((num) => num === input).length > 0;
};
console.log(sequentialDigits(1234));
console.log(sequentialDigits(1235));
console.log(sequentialDigits(5321));