RegEx -> alle Input type="text" finden die nicht readonly sind
Dieter72
- php
Hallo,
ich möchte alle Text-Eingabefelder eines Formulars mit regex ermitteln, die nicht auf readonly stehen.
Meine bisherigen regex-Versuche sind bis zu dem Punkt Input-Felder finden gekommen:
preg_match_all('/(\<input.*type\s?\=\s?"text".*>)/', $siteCode,$matches)
Mit diesem Suchpattern hoffe ich alle einzeiligen Eingabe-Felder eines Formulars zu ermitteln.
Das Problem hierbei ist schon, das ich nicht weiss, ob meine Expression so sinnvoll ist...
Mein zweites Problem ist, das ich aber sämtliche Input-Felder die auf "readonly" stehen, ausschliessen möchte.
Da ich trotz Eigenbemühungen nicht wirklich weiterkomme, bitte ich um mithilfe.
Gruss
Dieter
Moin
preg_match_all('/(\<input.*type\s?\=\s?"text".*>)/', $siteCode,$matches)
Mit diesem Suchpattern hoffe ich alle einzeiligen Eingabe-Felder eines Formulars zu ermitteln.
Das Problem hierbei ist schon, das ich nicht weiss, ob meine Expression so sinnvoll ist...
relativ umständlich
preg_match_all('~<input (.*?)>~')
<- liefert alle Inputs zurück
Mein zweites Problem ist, das ich aber sämtliche Input-Felder die auf "readonly" stehen, ausschliessen möchte.
preg_match_all('~<input (((?!readonly).)*?)>~')
Schließt Inputs aus, die readonly enthalten.
Gruß Bobby
Moin
preg_match_all('/(\<input.*type\s?\=\s?"text".*>)/', $siteCode,$matches)
relativ umständlich
preg_match_all('~<input (.*?)>~')
<- liefert alle Inputs zurück
sorry, ich überlas, dass du alle teyxt Inputy haben möchtest. Dann selbstverständlich:
<input ((type.*?text).*?)>
preg_match_all('~<input (((?!readonly).)*?)>~')
und <input (type.*?text((?!readonly).)*?)>
Gruß Bobby
Danke, werde ich jetzt erstmal einbauen und durchtesten!
Vielen Dank für die Hilfe!
Gruss
Dieter
Moin
preg_match_all('/(\<input.*type\s?\=\s?"text".*>)/', $siteCode,$matches)
relativ umständlich
preg_match_all('~<input (.*?)>~')
<- liefert alle Inputs zurück
sorry, ich überlas, dass du alle teyxt Inputy haben möchtest. Dann selbstverständlich:
<input ((type.*?text).*?)>
preg_match_all('~<input (((?!readonly).)*?)>~')
und <input (type.*?text((?!readonly).)*?)>
Gruß Bobby
Hallo nochmal,
zuerst Danke für deine Hilfe...
Moin
preg_match_all('/(\<input.*type\s?\=\s?"text".*>)/', $siteCode,$matches)
Mit diesem Suchpattern hoffe ich alle einzeiligen Eingabe-Felder eines Formulars zu ermitteln.
Das Problem hierbei ist schon, das ich nicht weiss, ob meine Expression so sinnvoll ist...relativ umständlich
preg_match_all('~<input (.*?)>~')
<- liefert alle Inputs zurück
Das liefert mir aber auch die Inputs zurück, die z.B. Passwortfelder sind, oder?
Ich versuche ja alle einzeiligen Text-Eingabefelder zu ermitteln die nicht readonly sind, wobei hierbei egal sein soll, wie diese deklariert wurden.
Beispiel:
a: <input name="vorname" type="text" size="30" maxlength="30">
b: <input type="text" id="vorname" size="30" maxlength="30">
c: <input style="width:100%" type="text" name="vorname">
d: <input name="vorname" type=text>
e: <input name="vorname" type="text" readonly="readonly">
f: <input name="vorname" type="password">
Hierbei sollte a-d gefunden und e,f ausgeschlossen werden.
Mein zweites Problem ist, das ich aber sämtliche Input-Felder die auf "readonly" stehen, ausschliessen möchte.
preg_match_all('~<input (((?!readonly).)*?)>~')
Schließt Inputs aus, die readonly enthalten.
Gruß Bobby
Gruss
Dieter
Moin
Hierbei sollte a-d gefunden und e,f ausgeschlossen werden.
Ich habe es noch gemerkt gehabt und schon vor deiner Antwort korrigiert... Du hast ja recht. ;)
Gruß Bobby
@@Dieter72:
nuqneH
preg_match_all('~<input (.*?)>~')
<- liefert alle Inputs zurück
Das liefert mir aber auch die Inputs zurück, die z.B. Passwortfelder sind, oder?
Das schon, aber du und alle, diesher geantwortet haben, habt eins völlig übersehen:
Ich versuche ja alle einzeiligen Text-Eingabefelder zu ermitteln die nicht readonly sind, wobei hierbei egal sein soll, wie diese deklariert wurden.
g: <input name="vorname">
h: <input name="vorname" readonly>
g sollte gefunden und h ausgeschlossen werden, denn beides ist völliq äquivalent zu d bzw. e:
d:
<input name="vorname" type=text>
e:<input name="vorname" type="text" readonly="readonly">
Die Angabe von type="text"
ist in HTML optional.
Und wie willst du mit type="email"
, type="tel"
usw. verfahren? Auch das sind einzeilige Text-Eingabefelder, die keine Passwortfelder sind.
Wozu brauchst du das Ganze überhaupt? Zum Ändern von bestehendem Quelltext?
Qapla'
preg_match_all('/(\<input.*type\s?\=\s?"text".*>)/', $siteCode,$matches)
Mit diesem Suchpattern hoffe ich alle einzeiligen Eingabe-Felder eines Formulars zu ermitteln.
Das Problem hierbei ist schon, das ich nicht weiss, ob meine Expression so sinnvoll ist...
Die Reihenfolge und was so vorkommen kann, ist vielseitig. Entweder man kann es einfach halten, da besteht in deinem Fall durchaus eine Chance oder ein anderes Werkzug muß her.
Du solltest auf jeden Fall dafür sorgen, daß deine Suchmuster auf möglichst kurze Treffer zielen. .*> kann auf sehr viel zutreffen u.U. auch auf irgendwas>irgendwas> also über mehrer Tags gehen. Ein beliebiges optionales Zeichen, welches kein > ist schafft ggf. Abhilfe. Eventuell auch die Modifier beachten.
Mein zweites Problem ist, das ich aber sämtliche Input-Felder die auf "readonly" stehen, ausschliessen möchte.
Um mit regex Zeichenketten nicht zu finden mußt Du Lookarounds bemühen.
alle Text-Eingabefelder eines Formulars mit regex ermitteln, die nicht auf readonly stehen.
Würde das etwas genauer angehn. Alle input...
<input\s+
Aber keine readonly. Z.B. mit einem negativen lookahead voraussehen:
(?![^>]*readonly)
type="text", type=text... mit einem positiven lookahead prüfen:
(?=[^>]*type\s*=\s*(?:["\']\s*)?text)
So könnte die regex-wurst dann so aussehn:
<input\s+(?![^>]*readonly)(?=[^>]*\btype\s*=\s*(?:["\']\s*)?text)[^>]*>
\b
ist eine Wortgrenze (zero-width) und \s
ein shorthand für [ \t\r\n\f]
(whitespace characters)
Wie auch immer, viel Freude beim rexeggen :-)