Bekreft telefonnumre med Java Regex

1. Oversikt

Noen ganger må vi validere tekst for å sikre at innholdet samsvarer med noe format. I denne raske opplæringen vil vi se hvordan du validerer forskjellige formater av telefonnumre ved hjelp av vanlige uttrykk.

2. Regelmessige uttrykk for å validere telefonnumre

2.1. Ti-sifret nummer

La oss starte med et enkelt uttrykk som vil sjekk om tallet har ti sifre og ingenting annet:

@Test offentlig ugyldig nårMatchesTenDigitsNumber_thenCorrect () {Mønster mønster = Mønster.kompil ("^ \ d {10} $"); Matcher matcher = pattern.matcher ("2055550125"); assertTrue (matcher.matches ()); }

Dette uttrykket tillater tall som 2055550125.

2.2. Antall med hvite mellomrom, prikker eller bindestreker

I det andre eksemplet, la oss se hvordan vi kan tillat valgfri mellomrom, prikker eller bindestreker (-) mellom tallene:

@Test offentlig ugyldig nårMatchesTenDigitsNumberWhitespacesDotHyphen_thenCorrect () {Pattern pattern = Pattern.compile ("^ (\ d {3} [-.]?) {2} \ d {4} $"); Matcher matcher = mønster.matcher ("202555 0125"); assertTrue (matcher.matches ()); }

For å oppnå dette ekstra målet (valgfritt mellomrom eller bindestrek), har vi ganske enkelt lagt til tegnene:

  • [- .]?

Dette mønsteret tillater tall som 2055550125, 202 555 0125, 202.555.0125, og 202-555-0125.

2.3. Antall med parenteser

La oss deretter legge til muligheten for å ha første del av telefonen mellom parentes:

@Test offentlig ugyldig nårMatchesTenDigitsNumberParenthesis_thenCorrect () {Pattern pattern = Pattern.compile "^ ((\ (\ d {3} \)) | \ d {3}) [-.]? \ d {3} [-.]? \ d {4} $ "); Matcher matcher = mønster.matcher ("(202) 555-0125"); assertTrue (matcher.matches ()); }

For å tillate den valgfrie parentesen i tallet, har vi lagt til følgende tegn i vårt vanlige uttrykk:

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

Dette uttrykket tillater tall som (202)5550125, (202) 555-0125 eller (202)-555-0125. I tillegg tillater dette uttrykket også telefonnumrene som er dekket i forrige eksempel.

2.4. Nummer med internasjonalt prefiks

Til slutt, la oss se hvordan du gjør det tillat et internasjonalt prefiks ved starten av et telefonnummer:

@Test offentlig ugyldig nårMatchesTenDigitsNumberPrefix_thenCorrect () {Mønstermønster = Mønster.kompil ("^ (\ + \ d {1,3} ()?)? ((\ (\ d {3} \)) | \ d {3}) [-.]? \ d {3} [-.]? \ d {4} $ "); Matcher matcher = mønster.matcher ("+ 111 (202) 555-0125"); assertTrue (matcher.matches ()); } 

For å tillate prefikset i nummeret vårt, har vi lagt til tegnene i begynnelsen av mønsteret vårt:

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

Dette uttrykket vil gjøre det mulig for telefonnumre å inkludere internasjonale prefikser, med tanke på at internasjonale prefikser normalt er tall med maksimalt tre sifre.

3. Bruke flere regulære uttrykk

Som vi har sett, kan et gyldig telefonnummer ha flere forskjellige formater. Derfor kan det være lurt å sjekke om vår String samsvarer med et av disse formatene.

I den siste delen startet vi med et enkelt uttrykk og la til mer kompleksitet for å oppnå målet om å dekke mer enn ett format. Noen ganger er det imidlertid ikke mulig å bruke bare ett uttrykk. I denne delen får vi se hvordan du kan koble flere regulære uttrykk til en enkelt.

Hvis vi ikke klarer å lage et vanlig regulært uttrykk som kan validere alle mulige tilfeller som vi ønsker å dekke, kan vi definere forskjellige uttrykk for hver av tilfellene og deretter bruke dem alle sammen ved å sammenkoble dem med et rørsymbol (|).

La oss se et eksempel der vi bruker følgende uttrykk:

  • Uttrykket som ble brukt i den siste delen:
    • ^ (\ + \ d {1,3} ()?)? ((\ (\ d {3} \)) | \ d {3}) [-.]? \ d { 3} [-.]? \ d {4} $
  • Regelmessig uttrykk for å tillate tall som +111 123 456 789:
    • ^ (\ + \ d {1,3} ()?)? (\ d {3} []?) {2} \ d {3} $
  • Mønster for å tillate tall som +111 123 45 67 89:
    • ^ (\ + \ d {1,3} ()?)? (\ d {3} []?) (\ d {2} []?) {2} \ d {2} $
@Test offentlig ugyldig nårMatchesPhoneNumber_thenCorrect () {Strengmønstre = "^ (\ + \ 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} $ "; Streng [] validPhoneNumbers = {"2055550125", "202555 0125", "(202) 555-0125", "+111 (202) 555-0125", "636 856 789", "+111636856789", "636 85 67 89", "+111636 85 67 89"}; Mønster mønster = Mønster.kompilere (mønstre); for (String phoneNumber: validPhoneNumbers) {Matcher matcher = pattern.matcher (phoneNumber); assertTrue (matcher.matches ()); }}

Som vi kan se i eksemplet ovenfor, ved å bruke rørsymbolet, kan vi bruke de tre uttrykkene på en gang, og dermed tillate oss å dekke flere tilfeller enn med bare ett vanlig uttrykk.

4. Konklusjon

I denne artikkelen har vi sett hvordan vi kan sjekke om en String inneholder et gyldig telefonnummer som bruker forskjellige regulære uttrykk. Vi har også lært å bruke flere regulære uttrykk samtidig.

Som alltid er hele kildekoden til artikkelen tilgjengelig på GitHub.


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