2013-05-15 15 views
5

Próbuję zrobić javascript regex dopasować:Regex na min 9 numerów

  • wymagany: 9 lub więcej numerów.
  • opcjonalnie: myślnik, ukośnik naprzód, znaki plus i spacja.
  • zabronione: dowolny inny znak

tej pory mam

^[0-9-+\/\s]{9,}$ 

Jedyny problem z tym (chyba) jest to, że liczy non numerycznych dozwolone znaki wzdłuż aby osiągnąć minimalną 9.

Jak mogę zmienić to tak, aby liczyło tylko liczby do osiągnięcia minimum 9?

+1

czyli na przykład ssn 000-11-2222, gdzie ma 9 cyfr, ale 11 znaków? – hometoast

Odpowiedz

7

Jeśli chcesz rozwiązać ten problem w jednym RE (niekoniecznie zalecane, ale czasami przydatne):

^[-+\/\s]*([0-9][-+\/\s]*){9,}$ 

Albo, jeśli chcesz pierwszych i ostatnich znaków do cyfr:

^[0-9](^[-+\/\s]*[0-9]){8,}$ 

To jest: cyfra, a następnie osiem lub więcej przebiegów opcjonalnych znaków, z których każda kończy się cyfrą.

+1

'[- + \/\ s] +' -> nie powinno to być "[- + \/\ s] *"? Kreski są opcjonalne. – nothrow

+0

@Yarcharian: tak. Dzięki. –

+0

Zaoszczędzisz dzień dzięki – Amol

1

^([0-9][-+\/\s]*){9,}$ powinien zrobić.

+1

Nie działa, gdy pierwszy znak nie jest cyfrą, a na końcu zezwala na brak cyfr. –

3

Można użyć uprzedzona aby sprawdzić, czy istnieje 9 lub więcej cyfr gdziekolwiek

^(?=(\D*\d){9,})[\d/+ -]+$ 
-------------- 
     | 
     |->match further only if there are 9 or more digits anywhere 

LUB

^([/+ -]*\d){9,}[/+ -]*$ 
+0

+1, ale '\ D' jest ładniejszy niż' [^ \ d] '. –

+0

@TimPietzcker tak, w rzeczy samej, sir .. dziękuję za sugestię..podstawiony ans – Anirudha

0

jego prosta z uprzedzona

Spróbuj wzór :

^(?=([^\d]*\d){9,})[0-9-+\/\s]*$ 
+1

kwantyfikator '{9,}' na końcu jest niepotrzebny.i to jest podobne do moich ans ..: P – Anirudha

+0

jeśli używasz {9,} regex jest szybszy niż przy użyciu +. ponieważ nie ma potrzeby sprawdzania wyprzedzenia, jeśli ma mniej niż 9 znaków. – Civa

+0

Nie, jest wolniejszy. Już sprawdziłeś długość w przodzie. Dlaczego to znowu? –