Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP] Wyrażenie Regularne php, Problem z walidiacją numeru Tel przy użyciu wyrażenia regularnego
korey
post 28.02.2010, 11:51:32
Post #1





Grupa: Zarejestrowani
Postów: 122
Pomógł: 2
Dołączył: 14.08.2009
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Witam!
Napisałem coś takiego:

  1.  
  2. //Sprawdzam pole "szkola_tel"
  3. if(empty($szkola_tel)){
  4. $info_txt_szkola_tel.='<font color="#B20000"> Pole nie zostało wypełnione.</font>';
  5. $blad=true;
  6. }
  7. else if(!ereg('^[0-9]{3}-[0-9]{2,3}-[0-9]{2,3}$' , $szkola_tel )){
  8. $info_txt_szkola_tel.='<font color="#B20000">Nieprawidłowy numer telefonu.</font>';
  9. $help_txt.='~ <font color="#B20000">Nr.Tel podaj w/g przykładu: <b>000-000-000</b> lub <b>000-00-00</b></font><br />';
  10. $blad=true;
  11. }
  12. else{
  13. $info_txt_szkola_tel.='<font color="#207C07"> OK.</font>';
  14. }

Wyrażenie działa poprawnie jak wpisuje sie numrey tel a takich formatach:
000-00-00
lub
000-000-000

Chciałbym do tego wszystkiego dodać numer kierunkowy, czyli np: +XX\s
lecz gdy próbuje to robię wyrażenie zwraca błąd. sad.gif

Z góry dziękuje za pomoc


--------------------
”Jestem nędzarzem, mam tylko marzenia.
Rozsyłam je u twych stóp,
Stąpaj lekko, gdyż stąpasz po mych marzeniach„
Go to the top of the page
+Quote Post
TNT
post 28.02.2010, 12:50:59
Post #2





Grupa: Zarejestrowani
Postów: 41
Pomógł: 2
Dołączył: 14.04.2007

Ostrzeżenie: (0%)
-----


+ chyba musi być escapowany, spróbuj:
Kod
^\+[0-9]{2}\s[0-9]{3}-[0-9]{2,3}-[0-9]{2,3}$


PS
ereg() jest przestarzała - http://pl.php.net/manual/en/function.ereg.php
Go to the top of the page
+Quote Post
korey
post 28.02.2010, 13:30:50
Post #3





Grupa: Zarejestrowani
Postów: 122
Pomógł: 2
Dołączył: 14.08.2009
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Hmm to jakiej funkcji używać.?

przerobiłem kod na:
  1. $tel = trim($szkola_tel);
  2. if(empty($szkola_tel)){
  3. $info_txt_szkola_tel.='<font color="#B20000"> Pole nie zostało wypełnione.</font>';
  4. $blad=true;
  5. }
  6. else if(!preg_match('^\+[0-9]{2}\s[0-9]{3}-[0-9]{2,3}-[0-9]{2,3}$' , $tel )){
  7. $info_txt_szkola_tel.='<font color="#B20000">Nieprawidłowy numer telefonu.</font>';
  8. $help_txt.='~ <font color="#B20000">Nr.Tel podaj w/g przykładu: <b>000-000-000</b> lub <b>000-00-00</b></font><br />';
  9. $blad=true;
  10. }
  11. else{
  12. $info_txt_szkola_tel.='<font color="#207C07"> OK.</font>';
  13. }

wstawilem preg_match()
w formularzy wpisywałem:
+23 324-343-434
i
+99 234-12-12
funkcja nadal zwraca błąd

Ten post edytował korey 28.02.2010, 13:50:58


--------------------
”Jestem nędzarzem, mam tylko marzenia.
Rozsyłam je u twych stóp,
Stąpaj lekko, gdyż stąpasz po mych marzeniach„
Go to the top of the page
+Quote Post
TNT
post 28.02.2010, 14:01:03
Post #4





Grupa: Zarejestrowani
Postów: 41
Pomógł: 2
Dołączył: 14.04.2007

Ostrzeżenie: (0%)
-----


preg_match ma inne ograniczniki(?) - nie wiem jak to nazwać tongue.gif
Zobacz
Kod
else if(!preg_match('/\+[0-9]{2}\s[0-9]{3}-[0-9]{2,3}-[0-9]{2,3}/'  , $tel )){
Go to the top of the page
+Quote Post
korey
post 28.02.2010, 14:12:17
Post #5





Grupa: Zarejestrowani
Postów: 122
Pomógł: 2
Dołączył: 14.08.2009
Skąd: Łódź

Ostrzeżenie: (0%)
-----


użyłem twojego kodu i nic.
usunąłem trim() i nic.
dodałem ^ i $ przed / i nic
dodałem ^ i $ po / i nic sad.gif
nie ma jakiegoś innego sposobu na walidiacje numeru tel.?


--------------------
”Jestem nędzarzem, mam tylko marzenia.
Rozsyłam je u twych stóp,
Stąpaj lekko, gdyż stąpasz po mych marzeniach„
Go to the top of the page
+Quote Post
TNT
post 28.02.2010, 14:43:11
Post #6





Grupa: Zarejestrowani
Postów: 41
Pomógł: 2
Dołączył: 14.04.2007

Ostrzeżenie: (0%)
-----


Zobacz co u ciebie wyświetli
  1. <?php
  2. $tel = '+48 000-09-32';
  3. if (preg_match('/\+[0-9]{2}\s[0-9]{3}-[0-9]{2,3}-[0-9]{2,3}/' , $tel))
  4. print 'ogien';
  5. else
  6. print 'failur';
  7. ?>
Go to the top of the page
+Quote Post
pyro
post 28.02.2010, 14:52:38
Post #7





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Nawet nie patrzyłem na przykłady innych, po prostu ułożyłem nowe:

  1. $phone_no = '+48 503-500-999';
  2. if(preg_match('|(\+[0-9]{2} )?[0-9]{3}-[0-9]{2,3}-[0-9]{2,3}|', $phone_no))
  3. {
  4. echo 'Numer telefonu poprawny';
  5. }
  6. else
  7. {
  8. echo 'Nieprawidłowy numer telefonu';
  9. }


Ten post edytował pyro 28.02.2010, 14:56:33


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
korey
post 2.03.2010, 15:29:46
Post #8





Grupa: Zarejestrowani
Postów: 122
Pomógł: 2
Dołączył: 14.08.2009
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Cytat(pyro @ 28.02.2010, 14:52:38 ) *
Nawet nie patrzyłem na przykłady innych, po prostu ułożyłem nowe:

  1. $phone_no = '+48 503-500-999';
  2. if(preg_match('|(\+[0-9]{2} )?[0-9]{3}-[0-9]{2,3}-[0-9]{2,3}|', $phone_no))
  3. {
  4. echo 'Numer telefonu poprawny';
  5. }
  6. else
  7. {
  8. echo 'Nieprawidłowy numer telefonu';
  9. }

Kod działa poprawnie ale gdy np podaje taki numer:
+3323 234-234-234 zwraca mi OK.
da sie to jakoś ulepszyć.?

teraz tak wygląda kod:
  1. //Sprawdzamy pole "szkola_tel"
  2. if(empty($szkola_tel)){
  3. $info_txt_szkola_tel.='<font color="#B20000"> Pole nie zostało wypełnione.</font>';
  4. $blad=true;
  5. }
  6. else if(!preg_match('|(\+[0-9]{2} )?[0-9]{3}-[0-9]{2,3}-[0-9]{2,3}|' , $szkola_tel )){
  7. $info_txt_szkola_tel.='<font color="#B20000">Nieprawidłowy numer telefonu.</font>';
  8. $help_txt.='~ <font color="#B20000">Nr.Tel podaj w/g przykładu: <b>+00 000-000-000</b> lub <b>+32 000-00-00</b></font><br />';
  9. $blad=true;
  10. }
  11. else{
  12. $info_txt_szkola_tel.='<font color="#207C07"> OK.</font>';
  13. }


--------------------
”Jestem nędzarzem, mam tylko marzenia.
Rozsyłam je u twych stóp,
Stąpaj lekko, gdyż stąpasz po mych marzeniach„
Go to the top of the page
+Quote Post
thek
post 2.03.2010, 16:02:31
Post #9





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Po pierwsze czy ktoś zwrócił uwagę na fakt, że + jest znakiem specjalnym wyrażeń i nie może być wstawiany ot tak sobie, gdyż oznacza, że poprzedzany element musi wystąpić przynajmniej jeden raz? Inna sprawa, że nawet gdy to poprawisz to nie uwzględniasz, że brak kierunkowego znowu wywali błąd. Ta część ma być opcjonalna, więc bez użycia ? się nie obejdzie.
EDIT: Chyba mi się na oczy już rzuciło dziś, albo za długo siedzę przy kompie, ale nie zauważyłem Twojego i późniejszego. Opisywałem wcześniejsze z postem TNT włącznie. Moja wina i kajam się za błąd z warunkowym kierunkowym.

Zastanawiam się, czy aby nie lepszym byłoby ewentualne "chwilowe" usunięcie kierunkowego, czyli +XX i pozbawienie ciągu wszelkich znaków innych niż cyfry bo przecież minus lub spacja mogą wystąpić niekoniecznie w podanych miejscach. Normą jest podawanie numerów nie tylko trójkami, ale także parami, a więc także w postaci: +48 503 50 09 99. Może użyć filter_var i zrobić "satanizację"? winksmiley.jpg W ten sposób nawet głupoty w stylu 7f5s-7f7s76 przeczyści do 75-7776 lub napisać samemu funkcję, która obetnie ewentualny kierunkowy i zostawi same cyfry by myślniki i spacje nie robiły bajzlu. No ale to już kwestia potrzeb i własnego pomysłu na przechowywanie numeru.

Ten post edytował thek 2.03.2010, 17:04:36


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
pyro
post 2.03.2010, 16:31:41
Post #10





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Cytat(thek @ 2.03.2010, 16:02:31 ) *
Po pierwsze czy ktoś zwrócił uwagę na fakt, że + jest znakiem specjalnym wyrażeń i nie może być wstawiany ot tak sobie, gdyż oznacza, że poprzedzany element musi wystąpić przynajmniej jeden raz? Inna sprawa, że nawet gdy to poprawisz to nie uwzględniasz, że brak kierunkowego znowu wywali błąd. Ta część ma być opcjonalna, więc bez użycia ? się nie obejdzie.


Czytałeś w ogóle to wyrażenie regularne? I jedno i drugie zostało uwzględnione.

@korey, zobacz to:

  1.  
  2. preg_match('|^(\+[0-9]{2} )?[0-9]{3}-[0-9]{2,3}-[0-9]{2,3}$|' , $szkola_tel )


Ten post edytował pyro 2.03.2010, 16:31:59


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
Fifi209
post 2.03.2010, 17:01:47
Post #11





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Proszę wyrażenie + przykład:

  1. <?php
  2.  
  3. $tel[] = '+32 250-250-45';
  4. $tel[] = '+3423 234-34-56';
  5. $tel[] = '250-78-455';
  6.  
  7. foreach ($tel as $val) {
  8. if (preg_match('#^(\+[\d]{2}+)?\s?([\d]{3}-[\d]{2,3}-[\d]{2,3})$#', $val)) {
  9. echo $val.'<br/>';
  10. }
  11. }
  12.  
  13. ?>


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
korey
post 3.03.2010, 08:27:49
Post #12





Grupa: Zarejestrowani
Postów: 122
Pomógł: 2
Dołączył: 14.08.2009
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Noo.
Użyłem wyrażenia od fifi209 sprawdziłem numery na różne sposoby i tym razem wszystko jest dobrze.
Dziękuje wam wszystkim.
ale skoro jesteśmy już w temacie wyrażeń to da sie jakoś przerobić to:
Tak by akceptowało adres w postaci "www.strona strony ze uwzględnionymi znakami - _ (i innymi używanymi w adresie). pl,com" itp
  1. $url = trim($szkola_www);
  2. if(empty($szkola_www)){
  3. // POLE NIE OBOWIĄZKOWE
  4. }
  5. else if (!preg_match('/^(http|ftp)([s]{0,1}):\/\/([a-z0-9]{1})((([a-z0-9-]*[-]{2})|([a-z0-9])*|([a-z0-9-]*[-]{1}[a-z0-9]+))*)((\.[a-z0-9](([a-z0-9-]*[-]{2})|([a-z0-9]*)|([a-z0-9-]*[-]{1}[a-z0-9]+))+)*)(\.([a-z0-9]{2,6})){0,1}((:[0-9]){0}|(:[1-9]{1}[0-9]*))\//iu', $url)){
  6. $info_txt_szkola_www.='<font color="#B20000">Nieprawidłowy adres url.</font>';
  7. $help_txt.='~ <font color="#B20000">Url podaj w/g przykładu: <b>http://</b>www.strona.com<b>/</b></font><br />';
  8. $blad=true;
  9. }
  10. else{
  11. $info_txt_szkola_www.='<font color="#207C07"> OK.</font>';
  12. }

Bo w tym przykładzie działa tylko tak:
http://www.strona.pl/
albo
http://www.strona.com/ itp.
prościej mówiąc chce usunąć http:// i / na koncu

Ten post edytował korey 3.03.2010, 08:30:16


--------------------
”Jestem nędzarzem, mam tylko marzenia.
Rozsyłam je u twych stóp,
Stąpaj lekko, gdyż stąpasz po mych marzeniach„
Go to the top of the page
+Quote Post
thek
post 3.03.2010, 08:56:03
Post #13





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Może to tylko mój pomysł, ale połącz walidację z poprawianiem smile.gif Jeśli brak jest protokołu, to dopisz go i potem już użyj filter_var( $test, FILTER_VALIDATE_URL ). Dopisanie brakującego http:// jest akurat tutaj konieczne, gdyż filtr ten wymaga posiadania protokołu przez ciąg znakowy. Oczywiście wcześniej możesz jeszcze potraktować całość FILTER_SANITIZE_URL

Ten post edytował thek 3.03.2010, 08:58:18


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
korey
post 3.03.2010, 11:46:48
Post #14





Grupa: Zarejestrowani
Postów: 122
Pomógł: 2
Dołączył: 14.08.2009
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Yyyy.. nie rozumiem. ze niby jak?


--------------------
”Jestem nędzarzem, mam tylko marzenia.
Rozsyłam je u twych stóp,
Stąpaj lekko, gdyż stąpasz po mych marzeniach„
Go to the top of the page
+Quote Post
thek
post 3.03.2010, 13:26:25
Post #15





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




FILTER_SANITIZE_URL usuwa wszystkie snaki, które nie mogą pojawić się w URL. Według specyfikacji zostawia jedynie liczby, cyfry oraz znaki $-_.+!*'(),{}|\\^~[]`<>#%";/?:@&=. a reszta wylatuje. Teraz jedynie sprawdzamy czy ma "z przodu" protokół jakikolwiek jeśli go brak, doklejamy http:// a potem jeszcze walidacja z użyciem FILTER_VALIDATE_URL. Wiem, że można od razu preg_match walnąć, ale jakoś mam większe zaufanie dla wbudowanych reguł filtrujących niż pisanie wyrażenia "z głowy" i preferuję zdać się podczas walidacji na pewne funkcje. Jedyne co trzeba jeszcze sprawdzić to czy da się przepchnąć adres ip zamiast domeny smile.gif http://80.56.200.43/index.php da się zwalidować czy nie? Bo i takie adresy mogą się przecież trafić...

EDIT: Żeby nie było. Adres podany przeze mnie jest czysto przypadkowy i nie prowadzi nigdzie. To ślepa uliczka mająca jedynie na celu zaprezentowanie wariantu z możliwą sytuacją walidacji IP zamiast domeny smile.gif

Ten post edytował thek 3.03.2010, 13:28:58


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
korey
post 6.03.2010, 13:13:32
Post #16





Grupa: Zarejestrowani
Postów: 122
Pomógł: 2
Dołączył: 14.08.2009
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Napisałem coś takiego:
  1. //Sprawdzamy pole "szkola_www"
  2. if(empty($szkola_www)){
  3. // POLE NIE OBOWIĄZKOWE
  4. }
  5. else if(!filter_var($szkola_www, FILTER_VALIDATE_URL)){
  6. $info_txt_szkola_www.='<font color="#B20000">Nieprawidłowy adres url.</font>';
  7. $help_txt.='~ <font color="#B20000">Url podaj w/g przykładu: <b>http://</b>www.strona.com<b>/</b></font><br />';
  8. $blad=true;
  9. }
  10. else{
  11. $info_txt_szkola_www.='<font color="#207C07"> OK.</font>';
  12. }
Po wysłaniu formularza mam taki komunikat:
Fatal error: Call to undefined function: filter_var() in C:\Program Files\WebServ\httpd-users\Szkolne_Kola\administrator\add_szkola.php on line 138

Nie mam pojęcia czemu sad.gif

Ten post edytował korey 6.03.2010, 13:15:40


--------------------
”Jestem nędzarzem, mam tylko marzenia.
Rozsyłam je u twych stóp,
Stąpaj lekko, gdyż stąpasz po mych marzeniach„
Go to the top of the page
+Quote Post
tr0lit
post 6.03.2010, 13:29:02
Post #17





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 6.03.2010

Ostrzeżenie: (0%)
-----


Musisz posiadać na serwerze wersję PHP 5.2.0, lub wyższą. Sprawdź używając funkcji phpinfo().
Go to the top of the page
+Quote Post
strife
post 6.03.2010, 13:30:05
Post #18





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

Ostrzeżenie: (0%)
-----


Cytat(korey @ 6.03.2010, 13:13:32 ) *
Napisałem coś takiego:
  1. //Sprawdzamy pole "szkola_www"
  2. if(empty($szkola_www)){
  3. // POLE NIE OBOWIĄZKOWE
  4. }
  5. else if(!filter_var($szkola_www, FILTER_VALIDATE_URL)){
  6. $info_txt_szkola_www.='<font color="#B20000">Nieprawidłowy adres url.</font>';
  7. $help_txt.='~ <font color="#B20000">Url podaj w/g przykładu: <b>http://</b>www.strona.com<b>/</b></font><br />';
  8. $blad=true;
  9. }
  10. else{
  11. $info_txt_szkola_www.='<font color="#207C07"> OK.</font>';
  12. }
Po wysłaniu formularza mam taki komunikat:
Fatal error: Call to undefined function: filter_var() in C:\Program Files\WebServ\httpd-users\Szkolne_Kola\administrator\add_szkola.php on line 138

Nie mam pojęcia czemu sad.gif


Może masz starą wersję php? http://pl.php.net/filter_var sprawdź jaką masz wersje korzystając z phpinfo();


--------------------
Go to the top of the page
+Quote Post
korey
post 6.03.2010, 15:43:20
Post #19





Grupa: Zarejestrowani
Postów: 122
Pomógł: 2
Dołączył: 14.08.2009
Skąd: Łódź

Ostrzeżenie: (0%)
-----


no macie racje.. ;/ To moze mógłby mo ktoś powiedzieć jak zaktualizować php w programie WebServ 1.3.?
Albo ewentualnie zmienić serwer na którym mógłbym te stronkę testować..?


--------------------
”Jestem nędzarzem, mam tylko marzenia.
Rozsyłam je u twych stóp,
Stąpaj lekko, gdyż stąpasz po mych marzeniach„
Go to the top of the page
+Quote Post
tr0lit
post 6.03.2010, 20:20:50
Post #20





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 6.03.2010

Ostrzeżenie: (0%)
-----


Ściągnij najnowszą wersję PHP z oficjalnej strony i podmień pliki, albo zmień WebServ na WAMP, albo XAMPP.

Ten post edytował tr0lit 6.03.2010, 20:35:32
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.08.2025 - 23:06