php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
String enthält nur Zahlen


 
TobiaZ
30-08-2002, 17:02 
 
Bekomme die Regular Expressions (um zu checken, ob ein String nur Zahlen enthält) nicht hin. Ist doch eigentlich leicht.

preg_match('/^[0-9]$/', $a[up_t]);

Wenn ich "1" eingebe, sagt der das ist ok, bei "k" sagt der falsch aber bei 11 sagt der auch falsch.

Am Besten wäre, wenn er nur EINE Zahl beliebiger Länge erlaubt.
Also z.B. "546549646" nicht aber "546 54665".

 
pseo
30-08-2002, 17:14 
 
hallo,

ich bin mir jetzt nicht so sicher, aber ich glaube, dass
der reguläre Ausdruck den Du definiert hast, nur
fuer eine einstellige Zahl funktioniert. Da musst Du noch was hinzufügen, dass aussagt, dass dies für beliebig viele Zeichen gelten soll.

Sowas wie .* oder so. Ich schau mal nach.


pseo

 
MoRtAlAn
30-08-2002, 17:25 
 
versuch mal eines von denen:

preg_match('/^\\\\d+$/', $a[up_t]);
preg_match('/^\\\\d{1,}$/', $a[up_t]);


gruss

 
pseo
30-08-2002, 17:26 
 
hallo,

das hab ich gefunden. Vielleicht hilft es Dir weiter.

pseo

Modifier
i
Dies ist der wohl am meisten gebrauchte Modifier. Bei regulären Ausdrücken wird standardmäßig zwischen Groß- und Kleinschreibung unterschieden - dieser Modifier schaltet dies aus.

s
Der s-Modifier veranlasst den Parser dazu, die Zeichenkette, auf die der reguläre Ausdruck angewendet wird, in einzelne Zeilen zu unterteilen - das Pattern wird hierbei also nicht auf die ganze Zeichenkette bezogen, sondern jede Zeile einzeln behandelt

m
Der m-Modifier ist das Komplement zum s-Modifier: Die Zeichenkette wird nicht in Zeilen aufgetrennt, sondern im Ganzen behandelt.

Die Modifier können beliebig kombiniert werden, s und m zusammen machen allerdings wenig Sinn.

Metacharaktere
Metacharaktere stehen für einen bestimmten Teil der Zeichenkette. Die folgende Aufstellung zeigt deren Bedeutungen.

.
Der Punkt steht für jedes beliebige Zeichen, außer einem Zeilenumbruch, wenn der m-Modifier nicht explizit angegeben wurde.

Beispiel: /./
Dieser Ausdruck trifft auf jede Zeichenkette zu, die genau ein beliebiges Zeichen an irgendeiner Stelle enthält -

sie trifft also auf alle Zeichenketten zu, die nicht leer sind.

^
Der Zirkumflex steht für den Anfang der Zeichenkette.

Beispiel: /^a/i

Trifft auf alle Zeichenketten zu, die mit einem kleinen oder großen "a" beginnen.

$
Das Dollarzeichen ist das Gegenteil zum Zirkumflex, es steht für das Ende der Zeichenkette.

Beispiel 1: /a$/

Trifft auf alle Zeichenketten zu, die ein kleines "a" am Ende einer Zeile haben.

Beispiel 2: /a$/m

Trifft auf alle Zeichenketten zu, die an ihrem Ende ein kleines "a" haben.

|
Dieses Zeichen wird verwendet, um Alternativen anzugeben (oder).

Beispiel: /^a|b$/

Trifft auf alle Zeichenketten zu, die aus genau einem kleinen "a" oder genau einem kleinen "b" bestehen.

( )
Die runden Klammern können benutzt werden, um Teile des Patterns zusammenzufassen und von anderen abzugrenzen.

Beispiel 1: /^a(b|z$)/

Trifft auf die Zeichenketten "ab" und "az" zu.

Beispiel 2: /^(a|b)(c|d)$/

Trifft auf die Zeichenketten "ac", "ad", "bc" und "bd" zu.

Beispiel 3:/^(a(b|c)|def)$/

Klammern können beliebig geschachtelt werden, dieser Ausdruck trifft daher auf die Zeichenketten

"ab", "ac" oder "def" zu.

[ ]
Die eckigen Klammern dienen zur Angabe von Zeichenklassen, mehr dazu im entsprechenden Abschnitt.

{ }
Die geschweiften Klammern dienen zur numerischen Angabe von Zeichenanzahlen, wir werden sie im folgenden Abschnitt "Quantifier" besprechen.

Soll ein Zeichen nicht als Metacharakter (hierzu zählt auch der gewählte Delimiter), sondern als normales Zeichen aufgefasst werden, so ist diesem Zeichen ein umgekehrter Schrägstrich (Backslash) voranzustellen:

Beispiel: /\(abc\)/

Dieser Ausdruck trifft auf jede Zeichenkette zu, die "(abc)" enthält.

Quantifier
Mit Quantifiern ist es möglich, eine minimale, maximale oder exakte Anzahl für ein oder mehrere Zeichen festzulegen. Wir kein Quantifier angegeben, so wird angenommen, dass das Zeichen genau einmal vorkommen muss.

Standard-Quantifier sind:

*
Der Stern steht für Anzahlen von 0 oder mehr.

Beispiel: /.*/

Trifft auf jede beliebige Zeichenkette (auch eine leere) zu.

+
Das Pluszeichen steht für Anzahlen von 1 oder mehr.

Beispiel: /a+/

Steht für eine Zeichenkette mit mindestens einem "a".

?
Das Fragezeichen steht für Anzahlen von 0 oder exakt 1.

Beispiel:/^(abc)?$/

Steht für "abc" oder eine leere Zeichenkette, nicht aber für "abcabc".

{n}
Steht für eine Anzahl von genau n Zeichen.

Beispiel: /a{6}/

Steht für exakt sechs "a".

{n,}
Steht für eine Anzahl von mindestens n Zeichen

Beispiel: /a{1,}/

Steht für mindestens ein "a" und ist somit äquivalent zu den Ausdrücken /a/ und /a+/.

{n,m}
Steht für eine Anzahl von mindestens n, aber höchstens m Zeichen.

Beispiel: /a{2,4}/

Trifft auf alle Zeichenketten zu, die 2, 3 oder 4 "a" hintereinander haben.

Standardmäßig versuchen die Quantifier, auf einen so großen Text wie möglich zu passen. Dies kann zu Problemen führen: Angenommen es liegt eine Zeichenkette $str = "texttexttext" vor, und wir möchten daraus "<b>text</b>text<b>text</b>" machen. Versuchen wir es folgendermaßen:

$str = preg_replace("!\(.*)\[/b\]!","<b>text</b>",$str);

so erhalten wir als Ergebnis "<b>texttext[b]text</b>" - nicht ganz das, was wir wollten. Um dieses Verhalten abzustellen, setzen wir hinter den Quantifier ein Fragezeichen "?":

$str = preg_replace("!\[b\](.*?)\[/b\]!","<b>text</b>",$str);

und das gewünschte Ergebnis ist erreicht! Jeder der oben beschriebenen Quantifier kann durch ein angehängtes "?" zu diesem Verhalten bewegt werden, so z.B. {1,4}? oder +?.

 
TobiaZ
30-08-2002, 17:40 
 
Danke euch beiden,

ich hab zwischenzeitlich auch einiges versucht. Bin dann wahrscheinlich zeitglich mit Hand auf die Lösung gestoßen:
preg_match('/^[0-9]+$/', $a[up_t]);
welches ja eigentlich das gleiche wie
preg_match('/^\d+$/', $a[up_t]);
ist.

Hab mit im Manual mal die Syntax (http://www.php3.de/manual/de/pcre.pattern.syntax.php) näher angesehen und auch das + gefunden. kannte nur den *

 
Troublegum
30-08-2002, 17:41 
 
if(intval($zahl)==$zahl) { echo $zahl." ist ein Integer." }

 
TobiaZ
30-08-2002, 17:53 
 
Wäre auch zu gebrauchen. Habs jetzt schon anders gelößt.


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:10 Uhr.