2010-12-02 8 views
7

Mam prostego wyrażenia regularnego:JavaScript wyrażenie regularne - dwa [AZ], a następnie przez trzy [0-9] tylko

[A-z]{2}[0-9]{3})$/g wewnątrz następującym:

regForm.submit(function(){ 
    if ($.trim($('#new-usr').val()).match(/([A-z]{2}[0-9]{3})$/g)) { 
    alert('No'); 
    return false; 
    } 
}); 

to poprawnie czyta że coś takiego jak 'ab123' daje ostrzeżenie, a 'ab1234' nie. Jednak 'abc123' wciąż wysyła alert. Potrzebuję go, więc wysyła alert tylko wtedy, gdy są to tylko 2 litery i trzy cyfry.

Odpowiedz

11

Spróbuj /^[A-z]{2}[0-9]{3}$/g zamiast.

Należy określić, że cały ciąg musi być dopasowany. W przeciwnym razie zostanie podświetlona wyróżniona część: a bc123.

(pominąłem () „s, ponieważ tak naprawdę nie potrzebują grupę.)

BTW, jesteś pewien, że chcesz [A-z] i nie tylko [A-Za-z]?

7

Klasa postaci [A-z] prawdopodobnie nie jest tym, czego potrzebujesz.

Dlaczego?

Klasa znaków [A-z] dopasowuje niektóre znaki niealfabetyczne, takie jak między innymi [, ].

JS fiddle link aby to udowodnić.

This W3school tutorial zaleca go niepoprawnie.

Jeśli potrzebne jest tylko małe litery używać [a-z]
Jeśli potrzebujesz tylko wielkie litery używać [A-Z]
Jeśli potrzebują zarówno zastosowanie: [a-zA-Z]

Jeśli chcesz dopasować ciąg, jeśli ma 2 litery a następnie 3 cyfry Wszędzie w ciągu, po prostu usunąć kotwicę końcowy $ z wzoru:

[a-z]{2}[0-9]{3} 

Jeśli chcesz dopasować ciąg, jeśli ma 2 litery a następnie 3 cyfry i nic innego stosowania zarówno początek i koniec kotwicy ^ kotwicę $ jak

^[a-z]{2}[0-9]{3}$ 
+0

Cześć, To był ciąg dokładnie dwóch a-z, a następnie trzech 0-9. Twoje zdrowie. –

+0

Klasa postaci Używam "\t Znaleźć dowolną postać z wielkich liter A na małe litery z", jak na stronie http://www.w3schools.com/jsref/jsref_obj_regexp.asp. Czy to nie jest zalecane? –

+0

@Scott: Nie jest zalecane.Zobacz moją zaktualizowaną odpowiedź. – codaddict

1

Alternatywnie można użyć:

/\b([A-z]{2}[0-9]{3})\b/g 

jeśli ciąg zawiera wiele słów i staramy się dopasować jedno słowo.

Powiązane problemy