# Telefonnummern mit regex korrigieren



## Riepi (30. März 2009)

Hallo,

ich würde gerne eine Telefonnummer der Form

+4923452423423 oder
023434545

über regex korrigieren. Ich möchte gerne alle Zeichen durch "" ersetzen, jedoch wenn ein + am Anfang steht, dieses erhalten. Über [^0-9]* bekomme ich ja alle Nicht-Ziffern, doch dieses passt auch auf das +.

...GetTelefon().replaceAll("[regex", ""));

Gruß Riepi


----------



## vfl_freak (30. März 2009)

Moin,

dies ist in der Anwendung, die ich hier vor geraumer Zeit übernehmen durfte, die Funktion, einen String, der eine Telefonnummer enthält in das reine Zahlenformat umwandelt!
Da ich mich damit jedoch noch nie intensiv auseinander gesetzt habe, gilt hier das Gleiche wie beim LOTTO: 
_*Alle Angaben wie immer ohne Gewähr  
*_

```
/**
   * Konvertiert eine übergebene Telefonnummer in eine reine Zahlenfolge
   * @param strPhoneNumber Die Telefonnummer mit Sonderzeichen
   * @return Die Zahlenfolge
   */
  public static String convertPhoneNumber(String strPhoneNumber){
    String strResult = null;
    StringBuffer sb = new StringBuffer();
    // Alles bis zu einem String Tel.: wegschneiden
    if (CUTTILLTELSTRINGINPHONENUMBER){
      String strPatternTel = "Tel.:";
      Pattern pT = Pattern.compile(strPatternTel);
      Matcher mT = pT.matcher(strPhoneNumber);
      boolean bTresult = mT.find();
      if (bTresult) {
        int nPos = mT.start() + strPatternTel.length();
        strPhoneNumber = strPhoneNumber.substring(nPos);
      }
      if (strPhoneNumber.length() < 3) return null;
    }
    // Alles bis zu einem String Tel.: wegschneiden
    if (CUTTILLNUMBERINPHONENUMBER){
      String strPatternTel = "[0-9+]";
      Pattern pT = Pattern.compile(strPatternTel);
      Matcher mT = pT.matcher(strPhoneNumber);
      boolean bTresult = mT.find();
      if (bTresult) {
        int nPos = mT.start();
        strPhoneNumber = strPhoneNumber.substring(nPos);
      }
      if (strPhoneNumber.length() < 3) return null;
    }
    if (CUTFROMCHARSINPHONENUMBER){
      //Pattern pC = Pattern.compile("[^0-9/\\- +)]");
      Pattern pC = Pattern.compile("[^0-9- +)]");
      Matcher mC = pC.matcher(strPhoneNumber);
      boolean bCresult = mC.find();
      if (bCresult){
        int nPos = mC.start();
        strPhoneNumber = strPhoneNumber.substring(0, nPos);
      }
      if (strPhoneNumber.length() < 3) return null;
    }
    Pattern p = Pattern.compile("\\+");
    Matcher m = p.matcher(strPhoneNumber);
    boolean result = m.find();
    int pPos = -1;
    if (result)
      pPos = m.start();
    if (pPos == 0){
      m.appendReplacement(sb, "00");
    }
    m.appendTail(sb);
    strResult = sb.toString();
    sb.setLength(0);
    if (DELETESPECIALCHARSINPHONENUMBER){
      p = Pattern.compile("[^0-9]");
      m = p.matcher(strResult);
      result = m.find();
      while (result) {
        m.appendReplacement(sb, "");
        result = m.find();
      }
      m.appendTail(sb);
      strResult = sb.toString();
    }
    p = Pattern.compile("^0{1}[1-9]{1}[0-9]*$");
    m = p.matcher(strResult);
    result = m.find();
    if (result){
      if (m_bAddSkypeVorwahl)
        strResult = "0049" + strResult.substring(1);
    }
    return strResult;
  }
```

Hoffe, es hilft Dir weiter!

Gruß
Klaus


----------



## Riepi (30. März 2009)

Danke, hab gerade aber selber nochmal rumprobiert und es funktioniert mit folgendem Ausdruck:

Update: Der zuvor angegebene hatte noch einen Bug.
Nach langem rumprobieren hier die Lösung:

anyString.replaceAll("[^0-9\\+]|((?<!\\A)\\+)", "") 

/*Ersetzte alle Zeichen durch 'nichts', die nicht eine Ziffer von 0-9 oder ein + sind oder alle +, die nicht auf den Input Anfang folgen*/


----------



## vfl_freak (31. März 2009)

Moin,

ich habe hier bei mir in den Sourcen eben noch folgende Stelle gefunden:


```
/* ************************************************************************************************
    	 * Legende: 
    	 * ========   AA = post/pre-Text
    	 *            BB = (+49)
    	 *            CC = Vorwahl  
    	 *            DD = Durchwahl                                                                
    	 * Pattern p = Pattern.compile("^ [a-zA-Z .,;:/\\-]* [ ]* [(]{0,1}[ ]*[+]{0,1}[ ]*[0-9]{0,2}[ ]*[)]{0,1} [ ]* [0-9]*[ ]*[/\\-]{0,1} [ ]*[ ]* [0-9]* [ ]* [a-zA-Z .,;:\\/-]* $");
         *                                ------- AA -------      --------------------- BB ---------------------      --------- CC --------          - DD -      ------- AA -------
    	 * ************************************************************************************************ */
    	Pattern p = Pattern.compile("^[a-zA-Z .,;:/\\-]*[ ]*[(]{0,1}[ ]*[+]{0,1}[ ]*[0-9]{0,2}[ ]*[)]{0,1}[ ]*[0-9]*[ ]*[/\\-]{0,1}[ ]*[ ]*[0-9]*[ ]*[a-zA-Z .,;:\\/-]*$");
    	Matcher m = p.matcher(strPhoneNumber);
```
 
Gruß
Klaus


----------

