Henry: HTML-Pattern: Telefonnummer soll mit +49 beginnen müssen!

Beitrag lesen

Hallo miomiomio,

Seid ihr zufällig auch php-kundig und könnt mir die selbe Validierung bei php erklären?

Interessant, dass das hier wohl offensichtlich nicht bekannt ist. Ob wohl viele Besucher denken, dass wäre nur HTML und CSS hier?

Du kannst Regex natürlich genauso mit PHP verarbeiten, zb. preg_match.

Grundsätzlich zu empfehlen ist jedoch Stringfunktionen zu nutzen, wenn möglich. Daher hier mal in dieser Form. Sieht umfangreich aus, ist es aber nicht, die Ausführlichkeit soll nur die Vorgehensweise verständiger machen.

<?php
// äöü utf8save


$tel1 = ' +491234567';

$tel2 = '+441234567';

$tel3 = '00491234567';

$tel4 = ' +49 123 4567';





// Die Abfrage könnte aber auch scheitern, weil Leerzeichen drin sind, also erst mal alle entfernen:
$tel1 = str_replace(' ','',$tel1);




if(strpos($tel1,'+49') === 0)
{
echo 'Ja, am Anfang vorhanden, Position: '.strpos($tel1,'+49');

// Nur wenn diese Voraussetzung erfüllt wurde gehts hier weiter:

// Dazu das plus (+) mal kurz raushalten, also +49123 wird zu 49123 und dern Rest auf Ziffern prüfen.

If( ctype_digit(substr($tel1,1))){echo 'Ja, besteht nur aus Ziffern';}else{echo 'Nein, gemischter Inhalt';}


}
elseif(strpos($tel1,'+49')){echo 'Nein, zwar vorhanden aber an Postition: '.strpos($tel1,'+49');}
else{echo 'Nein, nicht vorhanden'.strpos($tel1,'+49');}






// Jetzt das Ganze mal als  Funktion und Längenbegrenzung:
// Die echoausgaben dienen hier nur der Verdeutlichung, und können auch entfernt/ersetzt werden)

function chk_telpre($tel, $pre ='+49', $minl = 5, $maxl = 20)
{
// Leerzeichen entfernen
$tel = str_replace(' ','',$tel);

// Wie lang ist die ganze Nummer und drei abziehen für prefix
$l = strlen($tel)-3;

// jetzt prüfen 
if($l < $minl || $l > $maxl ){echo 'Länge der Nummer ungültig';return false;}


// Jetzt schauen, ob prefix richtig ist (beachte !== anstatt != *boolsche operator/identisch)
if(strpos($tel,$pre) !== 0){echo $pre.' ist nicht am Anfang (Position 0)vorhanden'; return false;}



// Jetzt prüfen ob der Rest Ziffern sind
If( !ctype_digit(substr($tel,1))){echo 'Gemischter Inhalt nicht nur Ziffern';return false;}

// Hier landest du erst wenn alles richtig ist, also kannst du jetzt ausführen was du möchtest:

echo '<h1>Telefonnnummer wurde verifiziert</h1>';

// Rückgabe = gesäuberte telnummer
return $tel;

} // end of func.



// Beispiele:
chk_telpre($tel1);
chk_telpre($tel2);
chk_telpre($tel3);
chk_telpre($tel4);




// Praxisnahes Beispiel: (kompaktere Funktion und schnelle flexible Anwendung)

function chk_telpre_2($tel, $pre ='+49', $minl = 5, $maxl = 20)
{
// Leerzeichen entfernen
$tel = str_replace(' ','',$tel);

// Wie lang ist die ganze Nummer und drei abziehen für prefix
$l = strlen($tel)-3;

// jetzt prüfen 
if($l < $minl || $l > $maxl ){return false;}

// Jetzt schauen, ob prefix richtig ist (beachte !== anstatt != *boolsche operator/identisch)
if(strpos($tel,$pre) !== 0){return false;}

// Jetzt prüfen ob der Rest Ziffern sind
If( !ctype_digit(substr($tel,1))){return false;}

// Rückgabe = gesäuberte telnummer
return $tel;

} // end of func.



$x = chk_telpre_2($tel1,'+49',3,10);
If($x){ echo 'Nummer ist OK: '.$x; } else{ echo '!!! Nummer nicht OK: '.$x;}

echo'<hr>';

$x = chk_telpre_2($tel2,'+49',3,10);
If($x){ echo 'Nummer ist OK: '.$x; } else{ echo '!!! Nummer nicht OK: '.$tel2;}





?>

Gruss
Henry