检查数字是否按顺序排列

我有一个文本框,其中包含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 }, ""); 

我们可以替换粗体条件。

最简单的解决方案是使用以下代码

 /** * 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; }, ""); 

只有在需要反向序列validation时才需要具有变量numbersRev的条件

你可以这样做:

 //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])); } 

我明白你的意思,为什么不在HTML本身设置输入字段的最大长度,然后将keyup事件绑定到输入框以触发validation?

例如:

   

您可以简单地将引脚拆分为单个数字,并迭代它们以确保至少有一个部分不按顺序排列(即+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 

概念validation逻辑:

 // 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); }