这将检查实时条目,但类似的原理可以用于检查按钮提交或类似的条目。我不是 100% 确定你想要哪种方式,所以我选择了 live 方法。
HTML
<input id="stream" type="text" />
Javascript
window.addEventListener("load", function () {
document.getElementById("stream").addEventListener("keyup", function (evt) {
var target = evt.target;
var value = target.value;
var prev;
var last;
var expect;
target.value = value.replace(/[^\d]/, "");
if (value.length > 1) {
prev = parseInt(value.slice(-2, -1), 10);
last = parseInt(value.slice(-1), 10);
expect = prev + 1;
if (expect > 9) {
expect = 0;
}
if (last !== expect) {
target.value = value.slice(0, value.length - 1);
}
}
}, false);
});
在jsfiddle 上
通过更改此处的值
if (value.length > 1) {
您可以更改检查的开始位置。
更新:好的,所以它是您想要的函数,并且您坚持将字符串拆分为一个数组。然后使用上面的作为参考,你可以把它转换成这样的东西。
Javascript
window.addEventListener("load", function () {
var testStrings = [
"0123456789012",
"0123456789",
"0123455555",
"555012345678901234",
"0123455555"];
function test(string, offset) {
if (typeof string !== "string" || /[^\d]/.test(string)) {
return false;
}
var array = string.split("");
var prev;
var last;
var expect;
return !array.some(function (digit, index) {
if (index >= offset) {
prev = parseInt(array[index - 1], 10);
last = parseInt(digit, 10);
expect = prev + 1;
if (expect > 9) {
expect = 0;
}
if (last !== expect) {
return true;
}
}
return false;
});
}
testStrings.forEach(function (string) {
console.log(string, test(string, 1));
});
});
在jsfiddle 上
由于您的问题并未完全指定所有可能性,因此上述内容将为空字符串(“”)返回 true,当然您可以简单地在开头添加一个检查。
我也不会为您的偏移量执行任何有效数字检查,但这也是您可以添加的简单内容。
当然,这些只是众多可能解决方案中的一(两个),但希望它能让您的思想朝着正确的方向发展。