nur a-z
joker
- php
hallo, hab vergebens eine function gesucht die prüft ob der inhalt des strings $blub nur aus buchstaben besteht...
kann mir da einer helfen?
(mit regulären Ausdrücken kenn ich mich nich t gut aus)
mfg joker
Hallo joker.
hallo, hab vergebens eine function gesucht die prüft ob der inhalt des strings $blub nur aus buchstaben besteht...
kann mir da einer helfen?
Sicher. Welche Buchstaben sollen alles enthalten sein?
Ich vermute A-Z, a-z, äöü ß.
(mit regulären Ausdrücken kenn ich mich nich t gut aus)
Da wirst du hier aber nicht umhin kommen.
Eine sehr gute Einleitung zum Thema RegEx gibt es hier: http://pcre.nophia.de/intro/index.php
Gruß, Ashura
Tag joker.
hallo, hab vergebens eine function gesucht die prüft ob der inhalt des strings $blub nur aus buchstaben besteht...
Ich nehme an, dass dein String neben Groß- und Kleinbuchstaben auch Umlaute und das Eszett enthalten darf und wenigstens 1 Zeichen lang sein muss. Dann würde das Muster so aussehen:
$muster = "/^[A-Za-zäöüÄÖÜß]+$/";
Die allgemeine Syntax regulärer Ausdrücke kannst du hier nachlesen:
http://de.selfhtml.org/perl/sprache/regexpr.htm, die PHP-Spezifika sind hier beschrieben: http://de.php.net/manual/de/reference.pcre.pattern.syntax.php.
Siechfred
Hi,
hallo, hab vergebens eine function gesucht die prüft ob der inhalt des strings $blub nur aus buchstaben besteht...
ctype_lower(), ctype_alpha(), ctype_print(), ...
(mit regulären Ausdrücken kenn ich mich nich t gut aus)
Die sind hier i.d.R. auch gar nicht notwendig.
Gruß, Cybaer
Tag Cybaer.
ctype_lower(), ctype_alpha(), ctype_print(), ...
(mit regulären Ausdrücken kenn ich mich nich t gut aus)
Die sind hier i.d.R. auch gar nicht notwendig.
Was ist mit Umlauten und dem Eszett bei o.g. Funktionen? Wäre da ein RegExp nicht die sicherere Variante?
Siechfred
Hi,
Was ist mit Umlauten und dem Eszett bei o.g. Funktionen?
Was soll damit sein? Werden auf Wunsch berücksichtigt. Auf Wunsch auch nicht.
Wäre da ein RegExp nicht die sicherere Variante?
Das kann nur der OP beantworten - schließlich wird *er* eine Aufgabenstellung vor Augen haben (die wir ohnehin nicht kennen).
Auf jeden Fall aber gibt es bereits eine Funktion in PHP die, wie erfragt, "nur a-z" erkennt. Für *darüberhinausgehende* Vorschläge wird aber sicherlich jeder offen sein - sicherlich auch wenn sie erstmal komplizierter sind. ;-)
Aber tröstlicherweise kann man auch mit ctype... komplexere Aufgaben erledigen. Z.B. das Zuweisen der Buchstaben zu einer Sprache. Das dürfte mit RegExp wohl nur mit aufwendigen Tabellen gelingen.
Und so gesehen ist ctype... den RegExp bei solcherlei Aufgabenstellungen in jeder Hinsicht überlegen ...
Gruß, Cybaer
Hi,
Z.B. das Zuweisen der Buchstaben zu einer Sprache.
Ähm, nicht "Sprache", Zeichensatz natürlich. =;-)
Gruß, Cybaer
Hi,
Und so gesehen ist ctype... den RegExp bei solcherlei Aufgabenstellungen in jeder Hinsicht überlegen ...
und ein link kommt immer gut.
http://de3.php.net/manual/de/ref.ctype.php
MfG
Tag Cybaer.
Was ist mit Umlauten und dem Eszett bei o.g. Funktionen?
Was soll damit sein? Werden auf Wunsch berücksichtigt. Auf Wunsch auch nicht.
Aha, und wie äußere ich meinen Wunsch in PHP?
Aber tröstlicherweise kann man auch mit ctype... komplexere Aufgaben erledigen. Z.B. das Zuweisen der Buchstaben zu einer Sprache. Das dürfte mit RegExp wohl nur mit aufwendigen Tabellen gelingen.
Hm, ist das bezogen auf die Fragestellung denn erforderlich?
Und so gesehen ist ctype... den RegExp bei solcherlei Aufgabenstellungen in jeder Hinsicht überlegen ...
Da wage ich als PHP-Laie nicht zu widersprechen :-)
Siechfred
Hi,
Aha, und wie äußere ich meinen Wunsch in PHP?
Indem Du mittels setlocale() den Zeichensatz deiner Wahl einstellst.
Hm, ist das bezogen auf die Fragestellung denn erforderlich?
Keineswegs. War eine rein prinzipielle Anmerkung, daß man kann, wenn man einfache Funktionen nicht mag und auf "komplexe" Programmierung steht. ;-)
Gruß, Cybaer
Tag Cybaer.
Indem Du mittels setlocale() den Zeichensatz deiner Wahl einstellst.
Naja, irgendwie komme ich mit der Doku zu setlocale noch nicht so recht klar. Gibt es vordefinierte Strings, derer ich mich beim Einstellen des Zeichensatzes bedienen kann (ich gehe mal davon aus) und wo finde ich die?
Siechfred
puts "Hallo " + gets.chomp + "."
?> Siechfred
=> Hallo Siechfred.
Naja, irgendwie komme ich mit der Doku zu setlocale noch nicht so recht klar. Gibt es vordefinierte Strings, derer ich mich beim Einstellen des Zeichensatzes bedienen kann (ich gehe mal davon aus) und wo finde ich die?
In den Beispielcodes der Userkommentare.
Gruß, Ashura
Tag Ashura.
Gibt es vordefinierte Strings, derer ich mich beim Einstellen des Zeichensatzes bedienen kann (ich gehe mal davon aus) und wo finde ich die?
In den Beispielcodes der Userkommentare.
Die Userkommentare habe ich schon vorher mal überflogen, aber das ist mir zu dünn. Der eine sagt: "Nimm dies", der nächste sagt "Dies funktioniert hier unter OS Xyz nicht, nimm besser das". Irgendwo muss es doch eine offizielle[tm] Quelle für diese Strings geben, ggf. mit Versionsnummer und Angaben zur Kompatibilität, oder?
Siechfred
你好 Siechfred,
Die Userkommentare habe ich schon vorher mal überflogen, aber das ist mir
zu dünn. Der eine sagt: "Nimm dies", der nächste sagt "Dies funktioniert
hier unter OS Xyz nicht, nimm besser das". Irgendwo muss es doch eine
offizielle[tm] Quelle für diese Strings geben, ggf. mit Versionsnummer und
Angaben zur Kompatibilität, oder?
Nein. Denn jeder Administrator kann die Locales benennen, wie er lustig ist.
Deshalb macht man sowas konfigurierbar.
再见,
克里斯蒂安
Tag Christian.
Denn jeder Administrator kann die Locales benennen, wie er lustig ist.
Hm, ich benenne eine Locale also 'blablubb' und setze sie mittels setlocale, soweit richtig? Ansonsten verlasse ich mich darauf, dass der Administrator bei der Benamsung seiner Locales die Userkommentare auf php.net gelesen hat, oder?
Deshalb macht man sowas konfigurierbar.
Irgendwie habe ich gerade ein massives Verständnisproblem (es ist einfach zu warm für Leute meines Alters ...). Ich vergebe für eine Locale einen Namen, gut. Ich möchte diese Locale verwenden, dazu nehme ich setlocale, auch klar (denke ich). Gibt es nun aber standardisierte Locales, die ich verwenden kann, oder muss ich PHP raten lassen, indem ich ihm ein Array möglicher Locales übergebe in der Hoffnung, dass eine davon passt?
Siechfred
你好 Siechfred,
Denn jeder Administrator kann die Locales benennen, wie er lustig ist.
Hm, ich benenne eine Locale also 'blablubb' und setze sie mittels
setlocale, soweit richtig?
Nicht du, sondern der Administrator des Servers.
Ansonsten verlasse ich mich darauf, dass der Administrator bei der
Benamsung seiner Locales die Userkommentare auf php.net gelesen hat, oder?
Nein, du verlässt dich drauf, dass der Administrator die Standard-Namen
belässt :)
Deshalb macht man sowas konfigurierbar.
Irgendwie habe ich gerade ein massives Verständnisproblem (es ist einfach
zu warm für Leute meines Alters ...). Ich vergebe für eine Locale einen
Namen, gut.
Nein, nicht du, sondern der Administrator.
Ich möchte diese Locale verwenden, dazu nehme ich setlocale, auch klar
(denke ich).
Jupp.
Gibt es nun aber standardisierte Locales, die ich verwenden kann, oder
muss ich PHP raten lassen, indem ich ihm ein Array möglicher Locales
übergebe in der Hoffnung, dass eine davon passt?
Weder, noch. Du schaust nach, welche Locales es gibt (locale -a) und
stellst das richtige in der Konfiguration der Software ein.
再见,
克里斯蒂安
Tag Christian.
Du schaust nach, welche Locales es gibt (locale -a) und stellst das richtige in der Konfiguration der Software ein.
Aha. Und wie erfahre ich, welche Locale die passende ist, wenn es nicht standardisiert ist? Muss ich mich dann doch darauf verlassen, dass es eine passend benannte Locale gibt? Und kann man sich bei einer Software dann überhaupt darauf verlassen, dass es eine passende Locale auf dem Zielsystem gibt? Angenommen, ich mache es so, wie es in den Userkommentaren steht, dann komme ich doch um eine Alternative nicht herum:
$input = $_POST['Nachname'];
$input_OK = False;
if(setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'de-DE', 'de', 'ge', 'de_DE.ISO_8859-1', 'German')) {
if(ctype_alpha($input)) {
$input_OK = True;
}
}
else {
if(preg_match("/^[a-zA-ZäöüÄÖÜß-]+$/", $input)) {
$input_OK = True;
}
}
if(!$input_OK) {
echo "Der Nachname enthält unzulässige Zeichen.";
}
So, wo ist nun der Sinn von ctype_alpha in diesem Zusammenhang, ich kann $input doch gleich nur mit preg_match testen (das war ja der Ursprung dieses Threadzweigs).
Siechfred
你好 Siechfred,
Du schaust nach, welche Locales es gibt (locale -a) und stellst das
richtige in der Konfiguration der Software ein.Aha. Und wie erfahre ich, welche Locale die passende ist, wenn es nicht
standardisiert ist?
Nachgucken :) man locale, man localedef
Und kann man sich bei einer Software dann überhaupt darauf verlassen,
dass es eine passende Locale auf dem Zielsystem gibt?
Wenn nicht, muss der Administrator halt ein entsprechendes Locale
einrichten.
Angenommen, ich mache es so, wie es in den Userkommentaren steht, [...]
Das macht man auch nicht -- wie gesagt, sowas hält man konfigurierbar.
So, wo ist nun der Sinn von ctype_alpha in diesem Zusammenhang, ich kann
$input doch gleich nur mit preg_match testen (das war ja der Ursprung
dieses Threadzweigs).
preg_match() verhält sich, abhängig vom locale, auch anders. i-Flag, \l,
\L, \u, \U, \w, \W, \s, \S, \d, \D, nur um mal einige zu nennen.
再见,
克里斯蒂安
Tag Christian.
Aha. Und wie erfahre ich, welche Locale die passende ist, wenn es nicht
standardisiert ist?
Nachgucken :) man locale, man localedef
Geht nicht, da kommt immer "Der Befehl 'man' ist entweder falsch geschrieben oder konnte nicht gefunden werden." *fg* Nee, im Ernst, ich mag mir nicht PHP installieren, nur um diese zwei manuals lesen zu können, gibt's die auch irgendwo anders zu bestaunen, oder ist ihr Inhalt gar gleich dem auf php.net?
Angenommen, ich mache es so, wie es in den Userkommentaren steht, [...]
Das macht man auch nicht -- wie gesagt, sowas hält man konfigurierbar.
Du meinst, dass der User vor Softwareinstallation beim Administrator den Namen der Locale für deutsch erfragt, dies dann (wie auch immer) in einer Konfiguration hinterlegt, sodass sich das Skript diesen String dann aus der Konfiguration holen kann?
preg_match() verhält sich, abhängig vom locale, auch anders. i-Flag, \l,
\L, \u, \U, \w, \W, \s, \S, \d, \D, nur um mal einige zu nennen.
Ja, bekannt. Aber ich wollte ja keine der Zeichenklassen verwenden ;-)
Verstehe ich dich also richtig, dass man bei umfangreichen PHP-Projekten zunächst die (das?) zutreffende Locale (ggf. durch den Anwender) erfragen lässt und dann setzt?
Siechfred
你好 Siechfred,
Aha. Und wie erfahre ich, welche Locale die passende ist, wenn es
nicht standardisiert ist?
Nachgucken :) man locale, man localedefGeht nicht, da kommt immer "Der Befehl 'man' ist entweder falsch
geschrieben oder konnte nicht gefunden werden." *fg* Nee, im Ernst, ich
mag mir nicht PHP installieren, nur um diese zwei manuals lesen zu
können, gibt's die auch irgendwo anders zu bestaunen, oder ist ihr Inhalt
gar gleich dem auf php.net?
Mit PHP hat das gar nichts zu tun. Aber Manpages kannst du auch im
Indernett einsehen, z. B. hier:
http://www.die.net/doc/linux/man/
locale(1)
locale(3)
locale(7)
localeconv(3)
localedef(1)
Angenommen, ich mache es so, wie es in den Userkommentaren steht, [...]
Das macht man auch nicht -- wie gesagt, sowas hält man konfigurierbar.Du meinst, dass der User vor Softwareinstallation beim Administrator den
Namen der Locale für deutsch erfragt, dies dann (wie auch immer) in einer
Konfiguration hinterlegt, sodass sich das Skript diesen String dann aus
der Konfiguration holen kann?
Korrekt. Wobei ein locale noch einiges mehr an Infos enthält als nur die
Sprache.
preg_match() verhält sich, abhängig vom locale, auch anders. i-Flag, \l,
\L, \u, \U, \w, \W, \s, \S, \d, \D, nur um mal einige zu nennen.Ja, bekannt. Aber ich wollte ja keine der Zeichenklassen verwenden ;-)
Solltest du aber :)
Verstehe ich dich also richtig, dass man bei umfangreichen PHP-Projekten
zunächst die (das?) zutreffende Locale (ggf. durch den Anwender) erfragen
lässt und dann setzt?
Ja, der Installateur trägt das (sic! ;-) richtige Locale in die
Konfiguration ein. Wenn er es nicht weiss, muss er halt beim
System-Administrator nachfragen.
再见,
克里斯蒂安
Hi,
Geht nicht, da kommt immer "Der Befehl 'man' ist entweder falsch geschrieben oder konnte nicht gefunden werden."
man ist der Kommandozeilenbefehl um in unixoiden Shells die Manual Pages aufzurufen (also das, was bei Windows die Hilfe ist - na ja, sinngemäß ;-)).
Demzufolge müßtest Du in PHP, vorausgesetzt dein Provider arbeitet mit Unix/Linux, diese Kommandozeilenbefehle wie üblich mit exec() & Co. aufrufen.
Ja, bekannt. Aber ich wollte ja keine der Zeichenklassen verwenden ;-)
Wenig sinnvoll. Um bei den äöü zu bleiben: Warum sind diese erlaubt? Wenn sie erlaubt sind, was ist dann mit àé etc.? Sind die nicht erlaubt? Wenn man alle diese Zeichen jenseits von a-z umfassen will, dann wird das Erstellen entsprechenden manuellen RegExp-Liste halt zur Qual ... ;-)
Gruß, Cybaer