Tôi đã dành thời gian để thực hiện phương pháp tiếp cận Javascript 100% cho câu hỏi của bạn. Tôi đã làm cho nó chỉ đơn giản là phân tích cú pháp mỗi ký tự trong chuỗi và làm so sánh chỉ số nguyên. Điều này làm việc không chỉ cho năm số nguyên liên tiếp, nhưng nó hoạt động để kiểm tra phần mười là tốt (10, 20, vv). Bạn cũng có thể tăng/giảm số lượng so sánh nếu muốn.
Cảnh báo hợp lý: mặc dù phương pháp này có khả năng mở rộng nếu được mã hóa để tìm tất cả các loại kích thước số, bạn vẫn bị ràng buộc bởi sức mạnh tính toán và số so sánh. Đó là lý do tại sao tôi chỉ cung cấp mã cho các chữ số và phần mười, tôi để nó mở cho bạn/cộng đồng để quyết định cách mở rộng từ đây.
jsFiddle
Nếu bạn tình cờ cần biết thêm chi tiết về làm thế nào nó hoạt động sau đó cho tôi biết, tôi có thể tiếp tục làm rõ hoạt động bên trong của nó.
var str = "1111122asdgas222*&^%121314151617bdjfjahdi234bdce56789";
var consecutive = 5; // Number of comparisons
// Single digits
alert("It is " + consecutiveDigits(str, consecutive) + " that " + str + " contains " + consecutive + " consecutive digits.");
// Tenths digits
alert("It is " + consecutiveDigits(str, consecutive) + " that " + str + " contains " + consecutive + " consecutive tenths.");
function consecutiveDigits(str, consecutive){
var curr,
prev,
count = 0;
for(var i = 0; i < str.length; ++i) {
curr = parseInt(str.split('')[i]);
if(isNumeric(curr)) {
if(count === 0){
++count;
}
else if(prev + 1 === curr){
++count;
if(count === consecutive){
return true;
}
}
prev = curr;
}
}
return false;
}
function consecutiveTenths(str, consecutive, iterations){
var curr,
prev,
curr_tenth = 0,
prev_tenth = 0,
count = 0,
count_tenth = 0;
for(var i = 0; i < str.length; ++i) {
curr = parseInt(str.split('')[i]);
if(isNumeric(curr)) {
++count;
if(count === iterations){
curr_digit = (prev * 10) + curr;
alert(count_digit + " " + curr_digit + " " + prev_tenth);
if(count_digit === 0){
++count_digit;
}
else if(curr_tenth === (prev_tenth + 1)){
++count_digit;
if(count_digit === consecutive){
return true;
}
}
prev_digit = curr_digit;
count = 0;
}
else {
prev = curr;
}
}
else {
count = 0;
}
}
}
function isNumeric(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
Kiểm tra (không có regex) của bội số không quá khó: ROUND (string.length/5) cung cấp cho bạn số chữ số tối đa có thể. Tại sao lại sử dụng regex? –
Làm thế nào để bạn biết nếu nó là '11,12,13,14,15' và không phải' 11,1,2, ... '? – chris85
Bạn không thể làm điều này với các biểu thức thông thường. –