problem z wyrazeniem regularnym
Tomasz Pichlinski - 20-01-2007 00:00
problem z wyrazeniem regularnym
Witam!
Nie moge znalezc przyczyny nieprawidlowego dzialania ponizszego kodu, dokumentacja PHP zawziecie milczy na ten temat. Przyznaje, ze kompletnie nie znam sie na php (w ogole web development mnie nie pociaga), a musze na zajecia napisac w nim pare skryptow. Kod, ktory sie dziwnie zachowuje:
if ( !ereg('^[a-z0-9_]+@[a-z0-9\-]+\.[a-z0-9\-.]+$', $this->email) ) { echo $this->email; echo '</br>popraw e-mail</br>'; }
a to efekt wykonania:
Warning: ereg() [function.ereg]: REG_ERANGE in E:\xampplite\htdocs\php_eclipse\test\formularz.php on line 73 piniu@interia.pl popraw e-mail
Naprowadzi mnie ktos o co dokladnie chodzi?
Z gory dzieki i pozdrawiam Tomasz 'Piniu' Pichlinski
Lemat - 20-01-2007 00:00
Tomasz Pichlinski napisał(a): > Witam! > > Nie moge znalezc przyczyny nieprawidlowego dzialania ponizszego > kodu, dokumentacja PHP zawziecie milczy na ten temat. Przyznaje, ze > kompletnie nie znam sie na php (w ogole web development mnie nie > pociaga), a musze na zajecia napisac w nim pare skryptow. Kod, ktory sie > dziwnie zachowuje: > > if ( !ereg('^[a-z0-9_]+@[a-z0-9\-]+\.[a-z0-9\-.]+$', $this->email) ) > { > echo $this->email; > echo '</br>popraw e-mail</br>'; > } > > a to efekt wykonania: > > Warning: ereg() [function.ereg]: REG_ERANGE in > E:\xampplite\htdocs\php_eclipse\test\formularz.php on line 73 > piniu@interia.pl > popraw e-mail > > Naprowadzi mnie ktos o co dokladnie chodzi?
może o taki zakres znaków: \-. od \ do .
ja bym na twoim miejscu jednak zajrzał na php.faq.pl tam jest lepsza funkcja sprawdzająca poprawność emaili.
-- Pozdrawiam Lemat pomóż zwalczyć spam z ICIC: http://www.lemat.priv.pl/index.php?m=page&pg_id=106 podlinkuj się do http://icic.pl
Viqq - 20-01-2007 00:01
Tomasz Pichlinski wrote: > if ( !ereg('^[a-z0-9_]+@[a-z0-9\-]+\.[a-z0-9\-.]+$', $this->email) ) ^^^ jak wstawiasz - (minus) to go nie escape'ujesz i umieszczasz go na końcu
[a-z0-9.-]
Vir - 20-01-2007 00:01
Viqq napisał(a): > Tomasz Pichlinski wrote: >> if ( !ereg('^[a-z0-9_]+@[a-z0-9\-]+\.[a-z0-9\-.]+$', $this->email) ) > ^^^ > jak wstawiasz - (minus) to go nie escape'ujesz i umieszczasz go na końcu
> [a-z0-9.-] Za to jak dajesz kropke to juz slash :) A no i na poczatku tego exp`a jest ^, ktory neguje - chyba nie bedzie dzialac. A problem, ktory wysypuje caly okd jest nieslashowana kropka w ostatnim zestawie (jest [a-z0-9\-.], powinnobyc [a-z0-9\-\.]).
-- V.
Tomasz =?iso-8859-2?q?=A6led=BC?= - 20-01-2007 00:01
Dnia piątek, 19 stycznia 2007 14:40, Vir napisał: > Viqq napisał(a): > > Tomasz Pichlinski wrote: > >> if ( !ereg('^[a-z0-9_]+@[a-z0-9\-]+\.[a-z0-9\-.]+$', $this->email) ) > > > > ^^^ > > jak wstawiasz - (minus) to go nie escape'ujesz i umieszczasz go na końcu > > > > [a-z0-9.-] > > Za to jak dajesz kropke to juz slash :) A no i na poczatku tego exp`a > jest ^, ktory neguje - chyba nie bedzie dzialac. A problem, ktory > wysypuje caly okd jest nieslashowana kropka w ostatnim zestawie (jest > [a-z0-9\-.], powinnobyc [a-z0-9\-\.]).
^ oznacza poczatek ciagu znakow -- Archiwum grupy: http://niusy.onet.pl/pl.comp.lang.php
Vir - 20-01-2007 00:01
Tomasz Śledź napisał(a): > Dnia piątek, 19 stycznia 2007 14:40, Vir napisał: >> Viqq napisał(a): >>> Tomasz Pichlinski wrote: >>>> if ( !ereg('^[a-z0-9_]+@[a-z0-9\-]+\.[a-z0-9\-.]+$', $this->email) ) >>> ^^^ >>> jak wstawiasz - (minus) to go nie escape'ujesz i umieszczasz go na końcu
>>> [a-z0-9.-] >> Za to jak dajesz kropke to juz slash :) A no i na poczatku tego exp`a >> jest ^, ktory neguje - chyba nie bedzie dzialac. A problem, ktory >> wysypuje caly okd jest nieslashowana kropka w ostatnim zestawie (jest >> [a-z0-9\-.], powinnobyc [a-z0-9\-\.]).
> ^ oznacza poczatek ciagu znakow O faktycznie, to uzyty w [] robi za negator :) Moj blad.
-- V.
Viqq - 20-01-2007 00:01
Vir wrote: > Viqq napisał(a): > >> Tomasz Pichlinski wrote: >> >>> if ( !ereg('^[a-z0-9_]+@[a-z0-9\-]+\.[a-z0-9\-.]+$', $this->email) ) >> >> ^^^ >> jak wstawiasz - (minus) to go nie escape'ujesz i umieszczasz go na końcu > > >> [a-z0-9.-] > > Za to jak dajesz kropke to juz slash :)
a właśnie nie :) w [] kropka traci specjalne znaczenie
> A no i na poczatku tego exp`a > jest ^, ktory neguje - chyba nie bedzie dzialac. A problem, ktory
to już ci wyjaśniono
> [a-z0-9\-.], powinnobyc [a-z0-9\-\.]).
nie, powinno być, jak napisałem wcześniej:
[a-z0-9.-]
(ewentualnie minus na początku [-a-z0-9.])
proponuję zapuścić sobie:
//echo '<pre>'; foreach (array('a','A','8','gG7','-','-a','b-','--7','E--','.','a.', '.-','a.8','r-3.t','g.4-K','.^[','a*','2,3') as $t) echo $t.': '.(ereg("^[a-z0-9.-]+$", $t) === FALSE ? '--' : 'OK')."\n";
Vir - 20-01-2007 00:01
>> Za to jak dajesz kropke to juz slash :)
> a właśnie nie :) > w [] kropka traci specjalne znaczenie
Niby tak, ale odpal sobie ten kod:
if (ereg('^[a-z0-9_]+@[a-z0-9\-]+\.[a-z0-9\-\.]+$',$email)){} // DZIALA if (ereg('^[a-z0-9_]+@[a-z0-9\-]+\.[a-z0-9\-.]+$',$email)){} // BLAD (ORYGINALNY PRZYKLAD)
Druga linia wywali blad.
Przesuniecie, jakie proponujesz faktycznie bledu nie generuje:
if (ereg('^[a-z0-9_]+@[a-z0-9\-]+\.[-a-z0-9.]+$',$email)){} // DZIALA if (ereg('^[a-z0-9_]+@[a-z0-9\-]+\.[a-z0-9.-]+$',$email)){} // DZIALA
http://www.greenend.org.uk/rjk/2002/...cketexpression Kropka, podobnie jak dwukropek i znak rownosci, spelnia jakies tam okreslone zadanie chociaz zwykle jest traktowana normalnie (tak jak ^ jest traktowany normalnie, chyba ze jest na poczatku). I co dziwne sama kropka na koncu dziala, ale poprzedzona myslnikiem wywala tamten blad. Nie wiem czemu, zbyt zmeczony jestem zeby szukac teraz :)
-- V.
Viqq - 20-01-2007 00:01
Vir wrote: > Niby tak, ale odpal sobie ten kod: > > if (ereg('^[a-z0-9_]+@[a-z0-9\-]+\.[a-z0-9\-\.]+$',$email)){} // DZIALA > if (ereg('^[a-z0-9_]+@[a-z0-9\-]+\.[a-z0-9\-.]+$',$email)){} // BLAD ^^^ ale potrafisz czasem pomyśleć prawda? no, to pomyśl, jakie znaczenie ma \-. hint 1: php backslasha \ nie escape'uje, a ereg traktuje go jak normalny znak w [] hint 2: a-z
> Przesuniecie, jakie proponujesz faktycznie bledu nie generuje: > > if (ereg('^[a-z0-9_]+@[a-z0-9\-]+\.[-a-z0-9.]+$',$email)){} // DZIALA > if (ereg('^[a-z0-9_]+@[a-z0-9\-]+\.[a-z0-9.-]+$',$email)){} // DZIALA
a no fucktycznie! ;)
> http://www.greenend.org.uk/rjk/2002/...cketexpression
zajrzyj sobie lepiej do jakiegoś normalnego podręcznika, np. http://www.tin.org/bin/man.cgi?section=7&topic=regex
> Kropka, podobnie jak dwukropek i znak rownosci, spelnia jakies tam > okreslone zadanie chociaz zwykle jest traktowana normalnie (tak jak ^ > jest traktowany normalnie, chyba ze jest na poczatku). ehh, regeksów to ty nie znasz
> Nie wiem czemu, zbyt zmeczony jestem zeby szukac teraz :) łikend przed tobą, w sam raz na regeksy ;)
Viqq - 20-01-2007 00:01
>> if (ereg('^[a-z0-9_]+@[a-z0-9\-]+\.[a-z0-9.-]+$',$email)){} // DZIALA ^^ a tak w ogóle to ten \ jest bez sensu, bo wówczas załapie się też taki string:
janek@dom\enka.pl
a to już nie jest poprawny e-mail
Vir - 20-01-2007 00:01
> ale potrafisz czasem pomyśleć prawda? > no, to pomyśl, jakie znaczenie ma \-. > hint 1: php backslasha \ nie escape'uje, a ereg traktuje go jak normalny > znak w [] > hint 2: a-z "a no fucktycznie! ;)" :)))))))) Kurde naprawde jestem chyba przemeczony, sorki.
>> http://www.greenend.org.uk/rjk/2002/...cketexpression > zajrzyj sobie lepiej do jakiegoś normalnego podręcznika, np. > http://www.tin.org/bin/man.cgi?section=7&topic=regex Niaf, nie trawie tych manopodobnych. XXI wiek, przez www prawie mozna sterowac sondami kosmicznymi, a niektorzy nadal tworza nieczytelne helpy pisane times`em.
> ehh, regeksów to ty nie znasz Dopiero sie ucze, zawsze jakas nowa wiedza sie przyda wiec dzieki, za zwrocenie uwagi na moje bledy :)
> łikend przed tobą, w sam raz na regeksy ;) Tia, bede leczyc zapalenie pluc raczej :D
-- V.
Tomasz Pichlinski - 23-01-2007 00:00
dzieki wszystkim za odpowiedzi.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
mysql i mysql-front, problem
String line; if (line=="cos"){...}....problem
Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?=
[postgres] Problem z =?ISO-8859-2?Q?zmian=B1_struktury_i_z?==?ISO-8859-2?Q?ale=BFno=B6ciami=2E?=
[oracle] =?ISO-8859-2?Q?zmia=BFd=BFony_przez_problem=3A_za?==?ISO-8859-2?Q?pytanie_do_hierarchi?=
Problem z wartościami w MySQL :( [ MySQL and ASP and VBScript ]
[PGSQL] czy ktos mial problemy z initdb pgsql 8.1 ?
[MySQL] Problem z zapisem danych w bazie danych
Problem z mysql - can't connect to MySQL/nietypowo...
zanotowane.pldoc.pisz.plpdf.pisz.pltejsza.htw.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|