Regulärer Ausdruck Problem!
Mindgap
- perl
Hi,
ich habe ein kleines Problem. Ich möchte ein Textfeld mit einem Regulären Ausdruck validieren. Es dürfen folgende Daten eingegeben werden:
123 KB
23 KB usw....
Mein Regulärer Ausdruck hierfür lautet: [1]?[0-9]?[.]?[0-9]?\s([MK]{1}[B]{1})$ und funktioniert auch soweit.
Jetzt möchte ich aber auch, das ich in das Textfeld einfach kein Zeichen eintragen kann. Soll bedeuten, in dem Textfeld soll entweder nichts oder z.B. 120 KB stehen.
Ist das irgendwie machbar?
Ich habe schon mit der ODER Funktion rumgespielt aber nichts wirklich funktionierendes gefunden.
Gruß,
Michael
0-9 ↩︎
hi,
Es dürfen folgende Daten eingegeben werden:
123 KB
23 KB usw....Mein Regulärer Ausdruck hierfür lautet: [1]?[0-9]?[.]?[0-9]?\s([MK]{1}[B]{1})$ und funktioniert auch soweit.
Jetzt möchte ich aber auch, das ich in das Textfeld einfach kein Zeichen eintragen kann. Soll bedeuten, in dem Textfeld soll entweder nichts oder z.B. 120 KB stehen.
Ist das irgendwie machbar?
WENN textfeldinhalt LEER ODER PRUEFUNG MIT regulärem ausdruck WAHR
DANN ok
SONST hoellisch_schmerzhafte_bestrafung
gruß,
wahsaga
0-9 ↩︎
Hi
WENN textfeldinhalt LEER ODER PRUEFUNG MIT regulärem ausdruck WAHR
DANN ok
SONST hoellisch_schmerzhafte_bestrafung
Gibts da auch nen Code für? WENN textfeldinhalt LEER ODER ???
Gruß,
Michael
Hallo Michael,
WENN textfeldinhalt LEER ODER PRUEFUNG MIT regulärem ausdruck WAHR
DANN ok
SONST hoellisch_schmerzhafte_bestrafungGibts da auch nen Code für? WENN textfeldinhalt LEER ODER ???
Ja, mit Sicherheit sogar ;-) frägt sich nur in welcher Programmiersprache?
in JS zB.:
if (eingabe.value == "" || meinRegExTest(eingabe.value))
(Was wahsaga meinte ist imho, dass es einfacher ist, nicht alles im RegEx zu lösen, sondern die Aufage aufzuteilen.)
viele Grüße
Michael
Hi
Ja, mit Sicherheit sogar ;-) frägt sich nur in welcher Programmiersprache?
in JS zB.:
if (eingabe.value == "" || meinRegExTest(eingabe.value))(Was wahsaga meinte ist imho, dass es einfacher ist, nicht alles im RegEx zu lösen, sondern die Aufage aufzuteilen.)
Ja, das kann sein. Jedoch habe ich das Problem, dass ich nur den RegEx Ausdruck an sich eingeben kann. Somit fallen also Angaben wie If usw. leider raus.
hi,
Ja, das kann sein. Jedoch habe ich das Problem, dass ich nur den RegEx Ausdruck an sich eingeben kann. Somit fallen also Angaben wie If usw. leider raus.
Ausdruck klammern, und mit einem Oder mit "Nichts" verbinden?
^(|([0-9]?[0-9]?[.]?[0-9]?\s([MK]{1}[B]{1})))$
Liefert bei Auswertung mittels preg_match in PHP für '23 KB' und '' true, für 'x' bspw. false.
gruß,
wahsaga
Hallo,
Ja, das kann sein. Jedoch habe ich das Problem, dass ich nur den RegEx Ausdruck an sich eingeben kann. Somit fallen also Angaben wie If usw. leider raus.
Dann wirds schwieriger.
Zunächst mal ne Kleinigkeit, dass Dein Ausdruck leichter zu lesen wird: ^\d{1,3} matched Dir 1-3 Ziffern; ((M|K)B) matched MB od. KB.
Der komplette Ausdruck wäre dann ^\d{1,3}\s((M|K)B)
Für das eigentliche Problem brauchst Du dann aber keine Alternative (|) sondern einen konditionalen Ausdruck und eine Assertion, ich glaube, so könnte es funktionieren:
(?(?=(.+))(^\d{1,3}\s((M|K)B))|())
Zur Erklärung:
(? legt den konditionalen Ausdruck fest, es wir gefolgt von der Bedingung: (?=(.+)) ist eine vorwärtsblickende Assertion (wenn ein oder mehrere beliebige Zeichen kommen, dann...)
nun folgen die beiden Alternativen wenn die Bedingung erfüllt ist: ^\d{1,3}\s((M|K)B) wenn nicht einfach nur ().
Greets
Michi
DANKESCHÖN!
Damit wäre das Problem gelöst und ich ein stückchen weiter bei meiner Arbeit!
Ihr seid die Besten!
Gruß,
Michael
gudn tach!
ich habe ein kleines Problem. Ich möchte ein Textfeld mit einem Regulären Ausdruck validieren. Es dürfen folgende Daten eingegeben werden:
123 KB
23 KB usw....Jetzt möchte ich aber auch, das ich in das Textfeld einfach kein Zeichen eintragen kann.
/^(?:\d{1,3} [MK]B)?$/
oder mit fuehrenden spaces
/^(?: +\d{1,3} [MK]B)?$/
\s wuerde ich hier nicht verwenden, da das z.b. auch tabs (haeufiger copy&paste-fehler) zulaesst.
ferner gibt es bzgl. der praefixe standards, die es einem leichter machen, genauere informationen zu uebermitteln. es gibt z.b. kB fuer 1000 byte und KiB fuer 1024 byte.
also z.b.
/^(?: +\d{1,3} (?:k|[KMGT]i?)B)?$/
prost
seth