2012-08-03 8 views
11

Moje umiejętności reg są prawie zerowe i staram się dopasować pole do dokładnie 7 lub 9 liczb (nie pomiędzy 7 lub 9, więc nie ma 8 numerów nie jest prawidłowych).Wyrażenia regularne odpowiadają dokładnie 7 lub 9 cyfrom

Próbowałem (proszę się nie śmiać)

/^([0-9]{7} | [0-9]{9}) 

i

/^([0-9]{7 | 9}) 

jeśli ktoś mógłby pomóc i wyjaśnić, że odpowiedź byłaby znacznie doceniane.

zakładam (być może błędnie), że to nie ma znaczenia co (programowanie) język używam

Dzięki

+0

możliwe duplikat [? Czy istnieje kwantyfikator regex, który mówi: „X albo Y powtarza”] (http://stackoverflow.com/questions/11397378/is -the-a-regex-quantifier-that-says-either-x-or-y-repeats) – fuxia

Odpowiedz

18
/^\d{7}(?:\d{2})?$/ 

\d jest nowoczesny regex skrótem [0-9] korzystając (?: zapobiega a group capture nie chcą lub muszą dzieje.

2

siedem lub dziewięć cyfr wynosi siedem cyfr następnie ewentualnie dwóch kolejnych cyfr:

[0-9]{7}([0-9]{2})? 
+1

Musisz zakotwiczyć wyrażenie. –

+1

Zależy, gdzie go używają. Nie na przykład w przypadku 'Pattern.matches()' języka Java. – Joey

2

zastosowanie tego regex ^\d{7}(\d{2})?$

0

Twój pierwszy zadziała, jeśli po prostu usuniesz spacje (i opcjonalnie nawias).

1

Twoje pierwsze podejście działa. Po prostu pozostaw puste pola, dodaj $, aby dopasować koniec łańcucha i końcowy separator slasha. Możesz również może zastąpić [0-9] ze skrótu \d:

/^(\d{7}|\d{9})$/ 
Powiązane problemy