Provjerite telefonske brojeve Java Regexom

1. Pregled

Ponekad moramo provjeriti valjanost teksta kako bismo bili sigurni da je njegov sadržaj u skladu s nekim formatom. U ovom brzom vodiču vidjet ćemo kako provjeriti valjanost različitih formata telefonskih brojeva pomoću regularnih izraza.

2. Regularni izrazi za provjeru telefonskih brojeva

2.1. Deseteroznamenkasti broj

Počnimo s jednostavnim izrazom koji će provjerite ima li broj deset znamenki i ništa drugo:

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

Ovaj izraz dopušta brojeve poput 2055550125.

2.2. Broj s razmacima, točkama ili crticama

U drugom primjeru, da vidimo kako možemo dopustiti neobavezni razmak, točkice ili crtice (-) između brojeva:

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

Da bismo postigli ovaj dodatni cilj (neobavezni razmak ili crtica), jednostavno smo dodali znakove:

  • [- .]?

Ovaj obrazac dopušta brojeve poput 2055550125, 202 555 0125, 202.555.0125, i 202-555-0125.

2.3. Broj s zagradama

Dalje, dodajmo mogućnost da imamo prvi dio našeg telefona između zagrada:

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

Da bismo omogućili neobavezne zagrade u broju, našem smo regularnom izrazu dodali sljedeće znakove:

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

Ovaj izraz dopušta brojeve poput (202)5550125, (202) 555-0125 ili (202)-555-0125. Uz to, ovaj izraz dopušta i telefonske brojeve obrađene u prethodnom primjeru.

2.4. Broj s međunarodnim prefiksom

Napokon, da vidimo kako dopustiti međunarodni prefiks na početku telefonskog broja:

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

Da bismo dopustili prefiks našeg broja, na početak uzorka dodali smo znakove:

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

Ovaj će izraz omogućiti telefonskim brojevima da uključuju međunarodne prefikse, uzimajući u obzir da su međunarodni prefiksi obično brojevi s najviše tri znamenke.

3. Primjena višestrukih regularnih izraza

Kao što smo vidjeli, važeći telefonski broj može poprimiti nekoliko različitih formata. Stoga bismo možda trebali provjeriti je li naš Niz u skladu s bilo kojim od ovih formata.

U posljednjem smo odjeljku započeli s jednostavnim izrazom i dodali još složenosti kako bismo postigli cilj pokriti više od jednog formata. Međutim, ponekad nije moguće upotrijebiti samo jedan izraz. U ovom ćemo odjeljku vidjeti kako spojiti više regularnih izraza u jedan.

Ako nismo u mogućnosti stvoriti zajednički regularni izraz koji može provjeriti valjanost svih mogućih slučajeva koje želimo pokriti, možemo definirati različite izraze za svaki od slučajeva, a zatim ih sve upotrijebiti spajanjem simbolom cjevovoda (|).

Pogledajmo primjer gdje koristimo sljedeće izraze:

  • Izraz upotrijebljen u posljednjem odjeljku:
    • ^ (\ + \ d {1,3} ()?)? ((\ (\ d {3} \)) | \ d {3}) [-.]? \ d { 3} [-.]? \ d {4} $
  • Regularni izraz koji omogućuje brojeve poput +111 123 456 789:
    • ^ (\ + \ d {1,3} ()?)? (\ d {3} []?) {2} \ d {3} $
  • Uzorak koji omogućuje brojeve poput +111 123 45 67 89:
    • ^ (\ + \ d {1,3} ()?)? (\ d {3} []?) (\ d {2} []?) {2} \ d {2} $
@Test public void whenMatchesPhoneNumber_thenCorrect () {Uzorci niza = "^ (\ + \ 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} $ "; String [] 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"}; Uzorak uzorka = Pattern.compile (uzorci); for (String phoneNumber: validPhoneNumbers) {Matcher matcher = pattern.matcher (phoneNumber); assertTrue (matcher.matches ()); }}

Kao što možemo vidjeti u gornjem primjeru, pomoću simbola cijevi možemo koristiti tri izraza u jednom potezu, što nam omogućuje da pokrijemo više slučajeva nego samo jednim regularnim izrazom.

4. Zaključak

U ovom smo članku vidjeli kako provjeriti je li a Niz sadrži valjani telefonski broj koji koristi različite regularne izraze. Također smo naučili kako koristiti više regularnih izraza istovremeno.

Kao i uvijek, puni izvorni kôd članka dostupan je na GitHub-u.