2013-03-28 10 views
7

Sprawdzam hasło. Jedną z tych funkcji jest sprawdzenie, czy wprowadzane hasło jest kolejno powtarzane. Nie mam jeszcze kodów, ponieważ nie wiem, jak to zrobić.Jak znaleźć 3 lub więcej kolejnych znaków?

Znalazłem ten jeden RegEx match two or more same character non-consecutive, ale pasuje tylko powtórzone przecinki.

oto są scenariusze:

5236aaa121 - Powtarzające się wzór bo a jest kolejno powtarzane 3 razy

2312aa32aa - Nie powtórzył znaków

111111asd - Powtarzające się wzór bo 1 jest kolejno powtarzane wielokrotnie

+4

Jeśli ktoś chce powtórzyć znak w swoje hasło kilka razy, należy im pozwolić. –

+0

Tak, wiem, to tylko wiadomość dla nich. – catherine

+3

W rzeczywistości zmniejszasz bezpieczeństwo swojego systemu, dodając takie arbitralne ograniczenia. – meagar

Odpowiedz

11

Użyj tylną odniesienie: /(.)\1\1/

Przykład :

var hasTripple = /(.)\1\1/.test('xyzzzy'); 

JSFiddle Example

+0

jak zaimplementować ten? Nie wiem, jak z niego korzystać. – catherine

+0

Jako przykład wypróbuj ten kod: 'var patt =/(.) \ 1 \ 1 /; alert (patt.test ("1234567890o")); alert (patt.test ("Moo")); alert (patt.test ("Mooo")); ' –

+0

Na jakiej platformie jesteś? Czy to jest w JavaScript, czy gdzieś po stronie serwera? – jmar777

2

Wystarczy powtórzyć ciąg znaków za pomocą pętli for i porównać jedną z nich, jeśli zarówno re same wtedy zwiększy się o jeden (zadeklarować jedną zmienną dla hrabiego) .. Na ostatniej wartości count sprawdzić, czy jest większa niż 0 to ciąg powtarza wzór ...

+0

Dzięki za informacje – catherine

1

można zrobić coś takiego:

var password = '5236aaa121'; 

for(var i = 0; i< password.length; i++) { 
    var numberOfRepeats = CheckForRepeat(i, password, password.charAt(i)); 
    //do something 

} 

function CheckForRepeat(startIndex, originalString, charToCheck) { 
    var repeatCount = 1; 
    for(var i = startIndex+1; i< password.length; i++) { 
     if(originalString.charAt(i) == charToCheck) { 
      repeatCount++; 
     } else { 
     return repeatCount; 
     } 
    } 
    return repeatCount; 
} 
+0

to nie działa – catherine

+0

Zostawiłem nawiasy i pętla była błędna. Zmieniłem to i przetestowałem i działa teraz – jugg1es

+0

Po prostu dam +1, ponieważ @ jmar777 dostał go pierwszy – catherine

2

Spróbuj regex: (.) ​​ \ 1 \ 1+

/(.)\1\1+/g 

Kropka dopasowuje dowolny znak, a następnie szukamy więcej niż jednym w wierszu. Ja testowałem to na http://regexpal.com/ i wierzę, że robi to, co chcesz

można użyć to tak:

str.match(/(.)\1\1+/g).length 

prostu sprawdzić, że jest 0

aby zobaczyć w akcji .... http://jsfiddle.net/yentc/2/

+0

Uważaj. Ten pozwala przejść "moo", gdy OP chce tylko "mooo" do przejścia. –

+0

'blah blaah blaaah' ma tylko 1 mecz nie 2. Potrzebuję 3 lub więcej razy kolejnych powtarzających się znaków – catherine

+0

Ach, chyba nie czytałem wystarczająco blisko. Zaktualizowany – user1717674

3

Co z następującym?

(.) \ 1 {2}

+0

jest 3 lub więcej razy powtarzany – catherine

+1

(.) Mówi "dowolny znak", a \ 1 {2,} zaraz po nim mówi "co najmniej dwa wystąpienia tej samej postaci" zaraz po. To faktycznie uderza mnie jako najbardziej zwięzłe wyrażenie regularne. –

Powiązane problemy