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.