Autor | Zpráva | ||
---|---|---|---|
Schindler Profil * |
#1 · Zasláno: 20. 9. 2013, 20:58:16
Dobrý večer,
dnes odpoledne jsem dodělával stránky, potřeboval jsem ošetřit poslední vstup do formuláře a nastal problém. Potřebuji na vstupu zadat celé jméno v UTF8 - může obsahovat a-z, A-Z a bílý znak. Není omezen počet mezer, kdyby někdo měl třeba tři jména (není moc podstatné), tak aby nenastala chyba. Ale nevím a nikde jsem nenašel, (resp. našel, ale nefungovalo mi to) jak udělat regulerní výraz, který běžně pracuje s UTF8, tedy i českými znaky. if(... ereg("^[A-z[:space:]]*$", $new_name) ...) { ... } Při vstupu "Jan Novak" vše proběhne v pohodě, v případě "Jan Novák" se podmínka nesplní, to je jasné, ale ani při variantách se nic neprovede. Někdo nějaké řešení, byl bych moc vděční za váš čas. Předem díky. |
||
Davex Profil |
Funkce
ereg* jsou zastaralé a budou z nových verzí PHP odstraněny. Použij funkci preg_match .
if (preg_match("~^[\p{Latin} ]+$~u", $jmeno)) { // vyhovuje } |
||
Schindler Profil * |
#3 · Zasláno: 20. 9. 2013, 23:13:26
Děkuji za odpověď, ale nepomohlo :-( Opět, když zadám "Jan Novak", tak proběhne vše v pořádku, v případě "Jan Novák" ne. Nějaký další nápad?
if((preg_match("~^[\p{Latin} ]+$~u", $new_name))){ |
||
nemeja Profil |
#4 · Zasláno: 20. 9. 2013, 23:24:00
|
||
Schindler Profil * |
#5 · Zasláno: 21. 9. 2013, 00:26:13
Tohle jsem také našel a stále nic. Zkusím přidat další indícii.
Pokud zadám "Jan Novak" do formuláře, tak se vše provede, při zadání "Jan Novák" do formuláře se nic nestane. Pokud si nechám vstup na výstupu zobrazit, tak je tam vždy vstup, takže to je zobrazeno správně. $new_name = $_POST["name"]; if( ... && preg_match('~^[a-ž ]+$~ui', $new_name) && ... ) { ... } Když místo textu z formuláře dám do proměnné nebo rovnou do preg_match "Jan Novák", tak se vše provede. if( ... && preg_match('~^[a-ž ]+$~ui', "Jan Novák") && ... ) { ... } |
||
tiso Profil |
#6 · Zasláno: 21. 9. 2013, 00:43:31
miesto medzery daj
\s :
'~^[a-ž\s]+$~ui' '~^[a-ž ]+\s*?$~ui' |
||
Schindler Profil * |
#7 · Zasláno: 21. 9. 2013, 11:35:27
Vše se chová pořád stejně :-( Nechápu, že když zadám místo proměnné řetězec s diakritikou, tak že to funguje, ale když je v proměnné diakritika, tak nikoliv. Pro kontrolu si vždy nechávám vypsat výsledek preg_match.
"Jan Novak" -> 1 "Jan Novák" -> 1 $new_name = "Jan Novak" -> 1 $new_name = "Jan Novák" -> 1 (když je $_POST["name"] "Jan Novak") $new_name = $_POST["name"] -> 1 (když je $_POST["name"] "Jan Novák") $new_name = $_POST["name"] -> 0 Už doopravdy nevím, budu to muset asi udělat uplně nějak jinak ... |
||
Davex Profil |
#8 · Zasláno: 21. 9. 2013, 11:52:43
Je na stránce s formulářem pro zadání jména nastaveno kódování UTF-8?
<meta charset="utf-8"> |
||
Schindler Profil * |
#9 · Zasláno: 21. 9. 2013, 11:58:03
Samozřejmě.
|
||
polonium Profil |
#10 · Zasláno: 21. 9. 2013, 12:15:18
Asi bych v regularnim vyraze nepuzival interpunkci, kdybych to musel skutecne overovat, tak bych skusil toto:
"~^[\D ]+$~i" Tady par dobrych rad: http://www.regularnivyrazy.info/shrnuti-syntaxe.html |
||
Schindler Profil * |
#11 · Zasláno: 21. 9. 2013, 13:37:40
Díky polonium! Až tohle řešení funguje. Moc ti za něj děkuji!
|
||
juriad Profil |
#12 · Zasláno: 21. 9. 2013, 16:08:59
Schindler:
poloniovo řešení jen testuje, zda řetězec obsahuje nečíslice. Proto projde i jméno #@$%^& . A prošlo by i jméno složené ze samých mezer.
echo preg_match('~^\\p{L}+( \\p{L}+)*$~u', "Jan Novák äěéřťýůíóöášďëŕúüôľžßčçñňĺ"); # mělo by vrátit 1 = splněno |
||
polonium Profil |
#13 · Zasláno: 22. 9. 2013, 01:23:32
A nebo to muzem skusit obracene. Rict co vsechno tam nechcem :) Tak to muzem udelat takhle:
"~^([^\d\W ]+ ){2,3}$~i" |
||
juriad Profil |
#14 · Zasláno: 22. 9. 2013, 16:48:59
polonium:
Řetězec vyhovující tvému regexu musí končit mezerou. Navíc Schindler píše: „Není omezen počet mezer“. Ani pak ti to fungovat nebude; regexem ~^[^\d\W ]+$~i neprojde ani áéíóů (na anglickém locale).
|
||
Časová prodleva: 11 let
|
0