Valideer telefoonnummers met Java Regex

1. Overzicht

Soms moeten we tekst valideren om er zeker van te zijn dat de inhoud aan een bepaalde indeling voldoet. In deze korte tutorial zullen we zien hoe u verschillende formaten van telefoonnummers valideert met reguliere expressies.

2. Reguliere expressies om telefoonnummers te valideren

2.1. Getal van tien cijfers

Laten we beginnen met een eenvoudige uitdrukking die dat wel zal doen controleer of het nummer tien cijfers heeft en niets anders:

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

Met deze uitdrukking zijn getallen mogelijk zoals 2055550125.

2.2. Getal met spaties, punten of koppeltekens

Laten we in het tweede voorbeeld eens kijken hoe we dat kunnen optionele witruimte, punten of koppeltekens toestaan ​​(-) tussen de cijfers:

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

Om dit extra doel te bereiken (optioneel witruimte of koppelteken), hebben we simpelweg de karakters toegevoegd:

  • [- .]?

Dit patroon staat nummers toe zoals 2055550125, 202 555 0125, 202.555.0125, en 202-555-0125.

2.3. Nummer met haakjes

Laten we vervolgens de mogelijkheid toevoegen om de eerste deel van onze telefoon tussen haakjes:

@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 ()); }

Om de optionele haakjes in het nummer toe te staan, hebben we de volgende tekens aan onze reguliere expressie toegevoegd:

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

Met deze uitdrukking zijn getallen mogelijk zoals (202)5550125, (202) 555-0125 of (202)-555-0125. Bovendien laat deze uitdrukking ook de telefoonnummers toe die in het vorige voorbeeld zijn behandeld.

2.4. Nummer met internationaal voorvoegsel

Laten we tot slot kijken hoe sta een internationaal kengetal toe aan het begin van een telefoonnummer:

@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 ()); } 

Om het voorvoegsel in ons nummer toe te staan, hebben we aan het begin van ons patroon de karakters toegevoegd:

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

Met deze uitdrukking kunnen telefoonnummers internationale voorvoegsels bevatten, rekening houdend met het feit dat internationale voorvoegsels normaal gesproken nummers zijn met een maximum van drie cijfers.

3. Meerdere reguliere expressies toepassen

Zoals we hebben gezien, kan een geldig telefoonnummer verschillende formaten aannemen. Daarom willen we misschien controleren of onze Draad voldoet aan een van deze formaten.

In de laatste sectie zijn we begonnen met een eenvoudige uitdrukking en hebben we meer complexiteit toegevoegd om het doel te bereiken om meer dan één formaat te bestrijken. Soms is het echter niet mogelijk om slechts één uitdrukking te gebruiken. In deze sectie zullen we zien hoe u meerdere reguliere expressies samenvoegt tot één.

Als we niet in staat zijn om een ​​gemeenschappelijke reguliere expressie te maken die alle mogelijke gevallen kan valideren die we willen behandelen, kunnen we verschillende expressies definiëren voor elk van de gevallen en ze vervolgens allemaal samen gebruiken door ze samen te voegen met een pipe-symbool (|).

Laten we een voorbeeld bekijken waarin we de volgende uitdrukkingen gebruiken:

  • De uitdrukking die in de laatste sectie is gebruikt:
    • ^ (\ + \ d {1,3} ()?)? ((\ (\ d {3} \)) | \ d {3}) [-.]? \ d { 3} [-.]? \ d {4} $
  • Reguliere expressie om getallen zoals toe te staan +111 123 456 789:
    • ^ (\ + \ d {1,3} ()?)? (\ d {3} []?) {2} \ d {3} $
  • Patroon om getallen zoals toe te staan +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} $ "; String [] validPhoneNumbers = {"2055550125", "202555 0125", "(202) 555-0125", "+111 (202) 555-0125", "636856789", "+111636856789", "636 85 67 89", "+111636 85 67 89"}; Patroonpatroon = Pattern.compile (patronen); voor (String phoneNumber: validPhoneNumbers) {Matcher matcher = pattern.matcher (phoneNumber); assertTrue (matcher.matches ()); }}

Zoals we in het bovenstaande voorbeeld kunnen zien, kunnen we door het pijpsymbool te gebruiken de drie uitdrukkingen in één keer gebruiken, waardoor we meer gevallen kunnen behandelen dan met slechts één reguliere uitdrukking.

4. Conclusie

In dit artikel hebben we gezien hoe u kunt controleren of een Draad bevat een geldig telefoonnummer met verschillende reguliere expressies. We hebben ook geleerd hoe u meerdere reguliere expressies tegelijkertijd kunt gebruiken.

Zoals altijd is de volledige broncode van het artikel beschikbaar op GitHub.