проверка строки для 3 или более последовательных последовательных буквенно-цифровых символов в javascript [дубликат]

public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int i = scan.nextInt();
        scan.nextLine();
        double d = scan.nextDouble();
        scan.nextLine();
        String s = scan.nextLine();

        System.out.println("String: " + s);
        System.out.println("Double: " + d);
        System.out.println("Int: " + i);
    }
2
задан Elvis 29 September 2015 в 19:34
поделиться

2 ответа

У вас может быть функция, подобная приведенной ниже, путем циклирования символов и использования метода строки charCodeAt, как показано ниже.

Примечание. Это относится к вопросу, поднятому в нижней ссылке.

проверка строки для 3 или более последовательных алфавитно-цифровых символов в javascript

function validate() {
  var pwd = document.getElementById('password').value;
  var isValid = checkPassword(pwd);
  var elm = document.getElementById('result');
  elm.innerHTML = isValid ? 'Valid' : 'Invalid';
  elm.style.color = isValid ? 'green' : 'red';
}

function checkPassword(s) {
    
    if(s) {
       var test = (x) => !isNaN(x);
       var check = (x, y, i) => x + i === y;
    
       for(var i = 0; i < s.length - 2; i++) {
         if(test(s[i])) {
            if(test(s[i + 1]) && test(s[i + 2])) {
              if(check(s[i], s[i + 1], 1) &&
                check(s[i], s[i + 2], 2)) {
                return false;
              }
            }
         } else if(!test(s[i + 1]) && !test(s[i + 2])) {
            if(check(s.charCodeAt(i), s.charCodeAt(i + 1), 1) &&
                check(s.charCodeAt(i), s.charCodeAt(i + 2), 2)) {
                return false;
              }
         }
       }
      
    }
    
    return true;
}

document.getElementById('buttonToValidate').click();
<input type="text" id="password" value="efg123!$" /> 
<input type="button" id="buttonToValidate" value="Check" onclick="validate()" />
<span id="result" />

0
ответ дан Aruna 28 August 2018 в 04:05
поделиться

Невозможно использовать RegEx, о котором я знаю, но вот наивный функциональный подход.

Сначала прокрутите строку и сравните каждый символ с двумя следующими символами, добавив +1 и +2 к текущему индексу и соответствующим образом сопоставлять.

Во-вторых, повторите цикл и сравните проверки следующих двух символов с текущим символом, чтобы увидеть, являются ли они последовательными.

Если обе петли не могут найти последовательные символы, функция возвращает true, в противном случае возвращает false.

Первые четыре возвращают false (fail), а последние три возвращают true (pass ).

function test(s) {
    // Check for sequential numerical characters
    for(var i in s) 
        if (+s[+i+1] == +s[i]+1 && 
            +s[+i+2] == +s[i]+2) return false;
    // Check for sequential alphabetical characters
    for(var i in s) 
        if (String.fromCharCode(s.charCodeAt(i)+1) == s[+i+1] && 
            String.fromCharCode(s.charCodeAt(i)+2) == s[+i+2]) return false;
    return true;
}

// For demo purposes only
var tests = [
    'efg123!$',
    'abcd567%',
    'xyz789^&',
    '#hijk23456',
    'ryiiu562@',
    'erty745#',
    'gjnfl45566^'
], sep = '\t\u2192 ', out = ['Fail','Pass'], eol = '<br>';
document.write('<pre>');
for(var i in tests) document.write(tests[i] + sep + out[+test(tests[i])] + eol);
document.write('</pre>');

6
ответ дан Tiny Giant 28 August 2018 в 04:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: