2011-01-09 22 views
14

Próbuję sprawdzić poprawność numeru telefonu (USA) bez żadnych dodatkowych znaków. więc format to 1-555-555-5555 bez kresek, spacji itp., a 1 jest opcjonalny. Jednak moje wyrażenie regularne będzie TYLKO wyjątkiem numerów z wiodącym 1 i mówi numery bez niego są nieprawidłowe. Oto, czego używam, gdzie popełniłem błąd?Wpisz znaki opcjonalne w wyrażeniu regularnym

"^(1)\\d{10}$" 
+0

bez kresek lub spacji? Czy wiesz, że utrudnisz to użytkownikowi, jeśli to zrobisz (badania pokazują, że ludzie mają większe trudności z długimi ciągami cyfr niż z krótszymi łańcuchami z separatorami)? Dezaktywuj kreski i spacje, a po prostu usuń je na wejściu. Nie zmuszaj użytkownika do robienia tego, na co pozwala twoje oprogramowanie. Twoi użytkownicy będą Ci wdzięczni. –

+0

projekt nie do mnie, ale ja się zgadzam :) – schwiz

Odpowiedz

26

Zastosowanie:

"^1?\\d{10}$" 

? oznacza "opcjonalny".

+1

ahh ok z jakiegoś powodu myślałem, że nawias oznacza opcjonalne. Dzięki! – schwiz

14

Nie zrobili nic, aby zrobić 1 opcjonalne. Umieściłeś to w grupie, ale to wszystko. Chcesz to:

"^1?\\d{10}$" 

że w zasadzie mówi, aby dopasować (w tej kolejności):

  • początku łańcucha
  • ewentualnie znak '1'
  • Dokładnie dziesięć cyfr
  • Koniec ciągu

Spójrz na documentation for Pattern, aby uzyskać więcej informacji. Na przykład: ? jest wymienione w sekcji "Chciwe kwantyfikatory" w następujący sposób:

X?               X, raz lub wcale

+2

Dzięki za odpowiedź, którą dasz Danielowi, masz dużo rep i odznak ;-) – schwiz

+1

lol, dzięki! :) – Daniel

+0

masz dużo powtórzeń i odznak: D – Michelle

2

Użyj tego numeru "/^((\+?1-[2-9]\d{2}-[2-9]\d{2}-\d{4})|(\([2-9]\d{2}\)(\s)?[2-9]\d{2}-\d{4}))$/" Pozwoli to tylko numery dozwolone w USA, które obejmują "1-xxx-xxx-xxxx", "+ 1-xxx-xxx-xxxx", (xxx) xxx-xxxx. Mam nadzieję, że tego właśnie szukasz.

+0

To nie ma nic wspólnego z pytaniem. – Toto

+0

Myślę, że to wyrażenie jest wystarczające do zatwierdzenia dowolnej liczby w USA. Czy nie jest to? –

Powiązane problemy