wer kann mir bei regex helfen ?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
mad-manne
Ehemaliges Teammitglied
Beiträge: 5403
Registriert: 18.03.2005 10:00
Wohnort: Marl im Ruhrgebiet

wer kann mir bei regex helfen ?

Beitrag von mad-manne »

Hallo Leute,
ich weiss ... ich bin ein noob, wenn es um REGEX geht. Das steht auch ganz oben auf meiner Wunschliste, wenn ich mal endlich wieder Zeit habe was zu lernen. Momentan geht's aber leider nich :oops:

Was ich bräuchte wäre folgendes ...

Ist es eine telefonnummer ?
Ich möchte in einer Variable überprüfen, ob sich darin doch eher Text als eine Telefonnummer befindet. Eine Telefonnummer besteht aber nicht ausschliesslich aus Ziffern, da verschiedene Trennzeichen (- / ) oder was auch immer zum trennen der Vorwahl und Rufnummern verwendet werden.
Mein Ansatz hier wäre folgender: einfach "zählen", wieviele Ziffern in dem String sind und wenn mehr als 60% des um Leerzeichen bereingten Strings Ziffern enthalten "glaube" ich einfach, dass es eine Telefonnummer ist.

Was ich also bräuchte wäre eine REGEX, die mir alle Ziffern aus dem String extrahiert ... dann kann ich je mittels strlen() vergleichen wieviele Ziffern enthalten sind.

Wäre jemand so nett und kann mir da auf die Sprünge helfen ?!

Gruss,
Manne.
Try not. Do or do not. There is no try. (YODA)
Supportanfragen via E-Mail oder PN werden ignoriert
Benutzeravatar
Underhill
Mitglied
Beiträge: 1180
Registriert: 24.09.2003 11:40
Wohnort: 742 Evergreen Terrace

Beitrag von Underhill »

Hi,

hilft das ein wenig? :wink:

Code: Alles auswählen

<?php
$number = '0123-123456';

//nur nummern:
//if (preg_match('/^[0-9]+$/i', $number))

//mit einigen sonderzeichen:
if (preg_match('/^[0-9\-\/\(\)\.\_\# ]+$/i', $number))
{
	echo 'good';
}
else
{
	echo 'bad';
}
?>
Gruss
Underhill
Benutzeravatar
mad-manne
Ehemaliges Teammitglied
Beiträge: 5403
Registriert: 18.03.2005 10:00
Wohnort: Marl im Ruhrgebiet

Beitrag von mad-manne »

Underhill hat geschrieben:Hi,

hilft das ein wenig? :wink:

Code: Alles auswählen

<?php
//if (preg_match('/^[0-9]+$/i', $number))
... / ...
?>
Hi ... ich fürchte NEIN :-?

Es ist leider ja so, dass in diesem feld aus einer Datenbank oft auch notizen abgelegt wurden(tja .. die user eben :oops:)
beim exportieren möcht eich jetzt nochmal den "Mist" sortieren.
Bei echten Telefonnummern können aber durchaus auch 'ne "Menge" zusätzlicher Zeichen vorkommen, deshlab ist es schweirig.

Ich glaube ich mache es jetzt doch "zu Fuss":
Ich scanne den String Zeichen für Zeichen und zähle alle ziffern, die mir "unterkommen". Wenn es dann mehr als 60% Ziffern sind. Kommt der String in der neuen Datenbank in ein Telefonnummernfeld ansonsten in ein Notizfeld!

Oder hat noch jemand eine Idee, wie und ob überhaupt mein Problem mit REGEX lösbar ist :roll:

Danke und Gruss,
Manne.
Try not. Do or do not. There is no try. (YODA)
Supportanfragen via E-Mail oder PN werden ignoriert
Benutzeravatar
Underhill
Mitglied
Beiträge: 1180
Registriert: 24.09.2003 11:40
Wohnort: 742 Evergreen Terrace

Beitrag von Underhill »

Hi,

welche Zeichen koennen das denn sein?

Code: Alles auswählen

1234567890 +*-/\()._#
Dann passt es doch:

Code: Alles auswählen

datensaetze auflesen
//wenn string nicht nur aus diesen Zeichen besteht:
if (preg_match('/^[0-9\-\/\(\)\.\_\# ]+$/i', $number))
mach nix
else
loeschen und in neues feld schreiben
Warum ueber wilde Prozentangaben? :wink:


Gruss
Underhill
Benutzeravatar
mad-manne
Ehemaliges Teammitglied
Beiträge: 5403
Registriert: 18.03.2005 10:00
Wohnort: Marl im Ruhrgebiet

Beitrag von mad-manne »

Underhill hat geschrieben:welche Zeichen koennen das denn sein?

Code: Alles auswählen

1234567890 +*-/\()._#
Dann passt es doch:

Code: Alles auswählen

datensaetze auflesen
//wenn string nicht nur aus diesen Zeichen besteht:
if (preg_match('/^[0-9\-\/\(\)\.\_\# ]+$/i', $number))
Mama ... ich weiss schon wieso ich das Zeug so hasse :D

Wenn ich gezz nur

Code: Alles auswählen

 0123456789-/() 
erlauben will ...
sieht es dann so aus ?!
if (preg_match('/^[0-9\-\/\(\) ]+$/i', $number))

und was bedeutet am Anfang '/^ und am Ende das +$/i'
und wo ist in deinem obigen Beispiel das *-Zeichen abgefragt, welches du zu den erlaubten gezählt hast.

Ich werd's auf jeden fall mal probieren ...

Danke erstmal,
Manne.
Try not. Do or do not. There is no try. (YODA)
Supportanfragen via E-Mail oder PN werden ignoriert
Benutzeravatar
Underhill
Mitglied
Beiträge: 1180
Registriert: 24.09.2003 11:40
Wohnort: 742 Evergreen Terrace

Beitrag von Underhill »

Hi,

reg. expressions doch sind keine hexerei :D :D

Du bist auf dem richtigen Weg:
preg_match('/^[0-9]+$/i', $number)
Start und Ende der Expression
preg_match('/^[0-9]+$/i', $number)
Von Anfang bis Ende des Strings
preg_match('/^[0-9]+$/i', $number)
Auf diese Zeichen pruefen
preg_match('/^[0-9]+$/i', $number)
String komplett pruefen
preg_match('/^[0-9]+$/i', $number)
gross und kleinschrift ignorieren
preg_match('/^[0-9\+]+$/i', $number)
ein + zusaetzlich zu 0-9 muss mit \ "escaped" werden
So grob mit eigenen Worten erklaert (keine 100% Gewaehr)... :wink:


Gruss
Underhill
Benutzeravatar
mad-manne
Ehemaliges Teammitglied
Beiträge: 5403
Registriert: 18.03.2005 10:00
Wohnort: Marl im Ruhrgebiet

Beitrag von mad-manne »

Underhill hat geschrieben:reg. expressions doch sind keine hexerei :D :D
Für mich leider schon (noch) wenn ich mir so die diversen "Monster" z.B. im phpBB-Quelltext ansehe, da wird mir ganz schwindelig :-?
So grob mit eigenen Worten erklaert (keine 100% Gewaehr)... :wink:
Vielen Dank nochmal ... ich taste mich ran und werde in Kürze berichten :D

So long,
Manne.
Try not. Do or do not. There is no try. (YODA)
Supportanfragen via E-Mail oder PN werden ignoriert
Dave
Mitglied
Beiträge: 2085
Registriert: 25.05.2003 15:03
Wohnort: Wuppertal

Beitrag von Dave »

Antworten

Zurück zu „Coding & Technik“