Validujte telefónne čísla pomocou Java Regex

1. Prehľad

Niekedy musíme text overiť, aby sme sa ubezpečili, že jeho obsah zodpovedá určitému formátu. V tejto rýchlej príručke sa dozvieme, ako overiť rôzne formáty telefónnych čísel pomocou regulárnych výrazov.

2. Regulárne výrazy na overenie telefónnych čísel

2.1. Desaťmiestne číslo

Začnime jednoduchým výrazom, ktorý bude skontrolujte, či má číslo desať číslic a nič iné:

@Test public void whenMatchesTenDigitsNumber_thenCorrect () {Pattern pattern = Pattern.compile ("^ \ d {10} $"); Matcher matcher = pattern.matcher ("2055550125"); assertTrue (matcher.matches ()); }

Tento výraz umožní čísla ako 2055550125.

2.2. Číslo s medzerami, bodkami alebo spojovníkmi

V druhom príklade sa pozrime, ako môžeme povoliť voliteľné medzery, bodky alebo spojovníky (-) medzi číslami:

@Test public void whenMatchesTenDigitsNumberWhitespacesDotHyphen_thenCorrect () {Pattern pattern = Pattern.compile ("^ (\ d {3} [-.]?) {2} \ d {4} $"); Matcher matcher = pattern.matcher ("202 555 0125"); assertTrue (matcher.matches ()); }

Na dosiahnutie tohto cieľa (voliteľné medzery alebo spojovník) sme jednoducho pridali znaky:

  • [- .]?

Tento vzor umožní čísla ako 2055550125, 202 555 0125, 202.555.0125a 202-555-0125.

2.3. Číslo so zátvorkami

Ďalej pridajme možnosť mať prvá časť nášho telefónu medzi zátvorkami:

@Test public void whenMatchesTenDigitsNumberParenthesis_thenCorrect () {Pattern pattern = Pattern.compile "^ ((\ (\ d {3} \)) | \ d {3}) [-.]? \ d {3} [-.]? \ d {4} $ "); Matcher matcher = pattern.matcher ("(202) 555-0125"); assertTrue (matcher.matches ()); }

Aby sme povolili voliteľnú zátvorku v čísle, pridali sme do nášho regulárneho výrazu nasledujúce znaky:

  • (\ (\ d {3} \)) | \ d {3})

Tento výraz umožní čísla ako (202)5550125, (202) 555-0125 alebo (202)-555-0125. Tento výraz navyše umožní aj telefónne čísla uvedené v predchádzajúcom príklade.

2.4. Číslo s medzinárodnou predvoľbou

Nakoniec sa pozrime, ako na to povoliť medzinárodnú predvoľbu na začiatku telefónneho čísla:

@Test public void whenMatchesTenDigitsNumberPrefix_thenCorrect () {Pattern pattern = Pattern.compile ("^ (\ + \ d {1,3} ()?)? ((\ (\ d {3} \)) | \ d {3}) [-.]? \ d {3} [-.]? \ d {4} $ "); Matcher matcher = pattern.matcher ("+ 111 (202) 555-0125"); assertTrue (matcher.matches ()); } 

Aby sme povolili predponu v našom čísle, pridali sme na začiatok nášho vzoru znaky:

  • (\ + \ d {1,3} ()?)?

Tento výraz umožní, aby telefónne čísla obsahovali medzinárodné predvoľby, pričom sa berie do úvahy, že medzinárodné predvoľby sú zvyčajne čísla s maximálne tromi číslicami.

3. Použitie viacerých regulárnych výrazov

Ako sme videli, platné telefónne číslo môže mať niekoľko rôznych formátov. Preto by sme mali skontrolovať, či je String vyhovuje niektorému z týchto formátov.

V poslednej časti sme začali jednoduchým výrazom a pridali sme viac zložitosti, aby sme dosiahli cieľ pokryť viac ako jeden formát. Niekedy však nie je možné použiť iba jeden výraz. V tejto časti uvidíme ako spojiť viac regulárnych výrazov do jedného.

Ak nedokážeme vytvoriť bežný regulárny výraz, ktorý dokáže overiť všetky možné prípady, ktoré chceme pokryť, môžeme definovať rôzne výrazy pre každý z prípadov a potom ich použiť všetky dohromady ich zreťazením so symbolom rúry (|).

Pozrime sa na príklad, kde používame nasledujúce výrazy:

  • Výraz použitý v poslednej časti:
    • ^ (\ + \ d {1,3} ()?)? ((\ (\ d {3} \)) | \ d {3}) [-.]? \ d { 3} [-.]? \ d {4} $
  • Regulárny výraz umožňujúci čísla ako +111 123 456 789:
    • ^ (\ + \ d {1,3} ()?)? (\ d {3} []?) {2} \ d {3} $
  • Vzor umožňujúci čísla ako +111 123 45 67 89:
    • ^ (\ + \ d {1,3} ()?)? (\ d {3} []?) (\ d {2} []?) {2} \ d {2} $
@Test public void whenMatchesPhoneNumber_thenCorrect () {String patterns = "^ (\ + \ d {1,3} ()?)? ((\ (\ d {3} \)) | \ d { 3}) [-.]? \ d {3} [-.]? \ d {4} $ "+" | ^ (\ + \ d {1,3} ()?)? (\ \ d {3} []?) {2} \ d {3} $ "+" | ^ (\ + \ d {1,3} ()?)? (\ d {3} [] ?) (\ d {2} []?) {2} \ d {2} $ "; Reťazec [] validPhoneNumbers = {"2055550125", "202 555 0125", "(202) 555-0125", "+111 (202) 555-0125", "636 856 789", "+111 636 856 789", „636 85 67 89", "+111 636 85 67 89"}; Pattern pattern = Pattern.compile (vzory); pre (String phoneNumber: validPhoneNumbers) {Matcher matcher = pattern.matcher (phoneNumber); assertTrue (matcher.matches ()); }}

Ako vidíme vo vyššie uvedenom príklade, pomocou symbolu potrubia môžeme použiť tri výrazy naraz, čo nám umožní pokryť viac prípadov ako iba jedným regulárnym výrazom.

4. Záver

V tomto článku sme videli, ako skontrolovať, či a String obsahuje platné telefónne číslo s použitím rôznych regulárnych výrazov. Tiež sme sa naučili, ako používať viac regulárnych výrazov súčasne.

Celý zdrojový kód článku je ako vždy k dispozícii na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found