2012-04-25 15 views
5

Nadal jestem bardzo nowy dla Regex i zasadniczo muszę utworzyć regułę, która akceptuje liczby i litery, ale nie można wprowadzać kolejnych znaków.Regex Odrzuć kolejne znaki

Na przykład: ABCD -> ok, abbcd -> zły

mam większość z nich do pracy, ale część nie mogę dowiedzieć się dokładnie jak mogę zabronić kolejnych znaków?

mój kod do tej pory:

/^[A-Za-z-0-9]{8,15}$/i 
+0

Początkowo myślę minus między Z i 0 jest podkreślenie, a jeśli tak, to lepiej użyj '[\ w]' zamiast '[A-Za-z_0-9]' – shift66

Odpowiedz

4
>>> r = /^((\w)(?!\2))+$/i 
>>> r.exec('abbcd') 
null 
>>> r.exec('abcd') 
[ 'abcd', 
    'd', 
    'd', 
    index: 0, 
    input: 'abcd' ] 

\2 część jest powrotem odniesienia i mecze cokolwiek charakter ostatnio dopasowane przez grupę (\w). Tak więc ujemna liczba wyprzedzająca (?!\2) oznacza "nie następuje sama postać". Jeśli niektóre terminy, których tutaj używałem, są dla ciebie nieznane, powinieneś sprawdzić je na MDN's Regular Expression Documentation.

Aby ograniczyć długość przyjętych ciągów 8-15 znaków, jak w PO, zmień + do {8,15}:

>>> r = /^((\w)(?!\2)){8,15}$/i 
>>> r.exec('abcd') 
null 
>>> r.exec('abcdabcd') 
[ 'abcdabcd', 
    'd', 
    'd', 
    index: 0, 
    input: 'abcdabcd' ] 
+0

rzeczą z tą odpowiedzią jest to, że usunąłem moją regułę limitu, która polega na tym, że użytkownik musi wprowadzić co najmniej 8 znaków, ale nie więcej niż 16. – shade917

+0

@ shade917: Możesz zmienić znak '+' na '{8,15}' (z twojego pytania), aby to osiągnąć. –

+0

Hej wielkie dzięki, to działa idealnie! – shade917