Telefonszámok ellenőrzése a Java Regex segítségével

1. Áttekintés

Néha ellenőriznünk kell a szöveget annak biztosítására, hogy tartalma megfeleljen valamilyen formátumnak. Ebben a gyors bemutatóban megtudhatjuk, hogyan érvényesíthetjük a telefonszámok különböző formátumait a reguláris kifejezések használatával.

2. Rendszeres kifejezések a telefonszámok érvényesítésére

2.1. Tízjegyű szám

Kezdjük egy egyszerű kifejezéssel, amely megteszi ellenőrizze, hogy a szám tíz számjegyű-e, és semmi más:

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

Ez a kifejezés lehetővé teszi a hasonló számokat 2055550125.

2.2. Szám szóközökkel, pontokkal vagy kötőjelekkel

A második példában nézzük meg, hogyan tudunk választható szóközök, pontok vagy kötőjelek engedélyezése (-) a számok között:

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

Ezen extra cél (opcionális szóköz vagy kötőjel) elérése érdekében egyszerűen hozzáadtuk a karaktereket:

  • [- .]?

Ez a minta lehetővé teszi a hasonló számokat 2055550125, 202 555 0125, 202.555.0125, és 202-555-0125.

2.3. Szám zárójelekkel

Ezután tegyük hozzá a telefonunk első része zárójelek között:

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

Az opcionális zárójel engedélyezéséhez a következő karaktereket adtuk hozzá a reguláris kifejezéshez:

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

Ez a kifejezés lehetővé teszi a hasonló számokat (202)5550125, (202) 555-0125 vagy (202)-555-0125. Ez a kifejezés lehetővé teszi továbbá az előző példában szereplő telefonszámokat is.

2.4. Szám nemzetközi előtaggal

Végül nézzük meg, hogyan kell engedélyezzen egy nemzetközi előtagot egy telefonszám elején:

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

Ahhoz, hogy engedélyezzük az előtagot a számunkban, hozzáadtuk a minta elejéhez a következő karaktereket:

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

Ez a kifejezés lehetővé teszi, hogy a telefonszámok tartalmazzák a nemzetközi előtagokat, figyelembe véve, hogy a nemzetközi előtagok általában legfeljebb háromjegyű számok.

3. Több reguláris kifejezés alkalmazása

Mint láttuk, egy érvényes telefonszám többféle formátumot ölthet fel. Ezért érdemes ellenőrizni, hogy a mi Húr megfelel ezen formátumok bármelyikének.

Az utolsó szakaszban egy egyszerű kifejezéssel kezdtük, és bonyolultabbá tettük a célt, hogy több formátumot is lefedjünk. Néha azonban nem lehet csak egy kifejezést használni. Ebben a szakaszban meglátjuk hogyan lehet több reguláris kifejezést egyesíteni egyetlen.

Ha nem tudunk létrehozni egy olyan közös reguláris kifejezést, amely igazolni tudja az összes lehetséges esetet, amelyet le akarunk fedni, akkor az egyes esetekhez különböző kifejezéseket határozhatunk meg, majd mindet együtt használhatjuk egy pipa szimbólummal (|) összefűzve.

Lássunk egy példát, ahol a következő kifejezéseket használjuk:

  • Az utolsó szakaszban használt kifejezés:
    • ^ (\ + \ d {1,3} ()?)? ((\ (\ d {3} \)) | \ d {3}) [-.]? \ d { 3} [-.]? \ d {4} $
  • Rendszeres kifejezés az ilyen számok engedélyezéséhez +111 123 456 789:
    • ^ (\ + \ d {1,3} ()?)? (\ d {3} []?) {2} \ d {3} $
  • Minta a számok megengedéséhez +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} $ "; Karakterlánc [] 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"}; Mintaminta = Pattern.compile (minták); a (String phoneNumber: validPhoneNumbers) {Matcher matcher = minta.matcher (telefonszám); assertTrue (matcher.matches ()); }}

Amint a fenti példában láthatjuk, a pipa szimbólum használatával a három kifejezést egy menetben használhatjuk, ezáltal több esetet tudunk lefedni, mint csak egy reguláris kifejezéssel.

4. Következtetés

Ebben a cikkben láthattuk, hogyan lehet ellenőrizni, hogy a Húr érvényes telefonszámot tartalmaz, különböző reguláris kifejezésekkel. Megtanultuk több szabályos kifejezés egyidejű használatát is.

Mint mindig, a cikk teljes forráskódja elérhető a GitHubon.