Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]sprawdzenie wpisywania numeu ulicy
jacusek
post 24.11.2010, 14:40:46
Post #1





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

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


Witam.
Próbuję za pomocą preg_match stworzyć sprawdzenie numeru ulicy i coś mi nie idzie. Chodzi mi o to, żeby user mógł wpisywać to w takich opcjach:
10
10/15
W tym pierwszysm przypadku to oczywiście żaden problem i funkcja może wyglądać tak:
  1. if(!preg_match('/^[0-9]+$/', $z)){
  2. //ciało funkcji}

Z dwoma numerami też nie byłoby problemu:
  1. if(!preg_match('/^[0-9]+ [0-9]+$/', $z)){
  2. //ciało funkcji}

Ale co zrobić, żeby móc dołożyć zamiast spacji znak '/'
znalezłem, że powinno się znaleźć coś takiego
  1. [\Q/\E]
, ale to niestety nie jest skuteczne.
w przzypadku zastosowania tego w ten sposób
  1. !preg_match('/^[0-9]+[\Q/\E]+[0-9]+$/'

dostaję komunikat unknown modifyfier '\'. Szukałem już w różnych tutoralach, ale nigdzie nie znalazłem odpowiedzi na moje pytanie.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 15)
CuteOne
post 24.11.2010, 14:47:00
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Też miałem podobny problem i skończyło się na tym, że walidacja polegała tylko na usunięciu zbędnych znaków (!@#$%^&*) dlaczego?
Przykładowe numery ulic:
12
1/1
1 /2
21/a
2111/1a
123a 12b
smile.gif
Go to the top of the page
+Quote Post
blade-mrn
post 24.11.2010, 14:55:53
Post #3





Grupa: Zarejestrowani
Postów: 113
Pomógł: 11
Dołączył: 20.10.2009

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


Nie wiem jak w tym wypadku ale generalnie \ służy do informowania parsera PHP żeby zignorował następny znak, a jak chcemy wypisać \ to trzeba dać dwa backslashe \\.


--------------------
"Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on to właśnie robi."
Albert Einstein
Go to the top of the page
+Quote Post
jacusek
post 25.11.2010, 07:47:17
Post #4





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

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


niestety dwa backslashe też nie działają.
Go to the top of the page
+Quote Post
oi.
post 25.11.2010, 08:56:49
Post #5





Grupa: Zarejestrowani
Postów: 145
Pomógł: 1
Dołączył: 12.07.2006

Ostrzeżenie: (10%)
X----


Do walidacji formularzy za pomocą JS można użyć gotowca np. www.jsvalidate.com - tylko taka mała uwaga na ich stronie pięknie waliduje formularze ale za cholery nie mogę tego na swoim serwerze zaimplementować.
Go to the top of the page
+Quote Post
pablo89pl
post 25.11.2010, 09:58:41
Post #6





Grupa: Zarejestrowani
Postów: 143
Pomógł: 19
Dołączył: 7.09.2009
Skąd: Rzeszów

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


preg_match('#^[0-9]+[a-z]*([\s/]+[0-9]*[a-z]*)*#')

10a 15c
10a 23
12/12
16a/23
121/122
12/2/4
takie beda poprawne

bierz pod uwage ze ktos moze takie cos jak 12/2/4 wpisac, mialme ostatnio tkai przypadek w pracy..
Go to the top of the page
+Quote Post
jacusek
post 25.11.2010, 10:48:27
Post #7





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

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


@pablo89pl
Nie wiem, ale gdzieś jest błąd składniowy. Szukam, ale nie mogę znaleźć.
Go to the top of the page
+Quote Post
pablo89pl
post 25.11.2010, 14:37:28
Post #8





Grupa: Zarejestrowani
Postów: 143
Pomógł: 19
Dołączył: 7.09.2009
Skąd: Rzeszów

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


dziwne..kopiowalem z regexBuddy, musi działać

Jaki błąd wyświetla? Podaj

btw.
  1. $subject = "12 2a/23c";
  2. $pattern = '%^[0-9]+[a-z]*([\s/]+[0-9]*[a-z]*)*%';
  3. $j = preg_match($pattern, $subject);
  4. echo $j


Go to the top of the page
+Quote Post
jacusek
post 26.11.2010, 10:47:31
Post #9





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

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


@pablo89pl
wstawiam to do takiej funkcji
  1. function checkstrNo($z,$form_name){
  2. if(!preg_match('%^[0-9]+[a-z]*([\s/]+[0-9]*[a-z]*)*%'), $z)){
  3. $tekst="Użyto niedozwolonych znaków w polu " .$form_name;
  4. popup_alert($tekst);
  5. }
  6. }

i w ogóle program podkreśla mi błąd składniowy unexpected ',' przy zmiennej $z.
Go to the top of the page
+Quote Post
pablo89pl
post 26.11.2010, 11:21:44
Post #10





Grupa: Zarejestrowani
Postów: 143
Pomógł: 19
Dołączył: 7.09.2009
Skąd: Rzeszów

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


Bo źle nawiasy wstawiłeś..
  1.  
  2. function checkstrNo($z,$form_name)
  3. {
  4. if( !preg_match( '%^[0-9]+[a-z]*([\s/]+[0-9]*[a-z]*)*%', $z ) )
  5. {
  6. $tekst="U?yto niedozwolonych znaków w polu " .$form_name;
  7. popup_alert($tekst);
  8. }
  9. }


PS. To co podałem dozwala male litery i cyfry, jak chcesz duże to musisz dodać
tzn do [a-z] w srodku dodaj A-Z tj. [a-zA-Z] albo bodajże \w na znaki utf, ale to już nie jestem pewien

Ten post edytował pablo89pl 26.11.2010, 11:27:13
Go to the top of the page
+Quote Post
jacusek
post 26.11.2010, 11:44:28
Post #11





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

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


Dzięki.
Ale nie do końca to o co moi chodziło.
Przepuszcza np takie rzeczy jak:
25/c . 25 /@
Tak się zastanawiam i po przeanalizowaniu właściwie jest to sprawa niemal nie do zrobienia - prznajmniej dla kogoś mniej doświadczonego. Przejrzałem sobie różne adresy które posiadam w bazie i niestety możliwości różnych kombinacji są tak szerokie, ze właście trudno wymyślić jakaś regułę.
Na razie wpadłem wymysliłem, ze moznaby ograniczyć tylko do cyfr i liczb ze znakiem łamania(backslash) i oczywiście z odpowiednią długością inputa i nad tym popracuję.
Go to the top of the page
+Quote Post
CuteOne
post 26.11.2010, 14:57:13
Post #12





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Więc tak jak mówiłem ;] chociaż Tobie dojście do takiego wniosku zajęło całe dwa dni o.O tongue.gif
Go to the top of the page
+Quote Post
pablo89pl
post 26.11.2010, 15:12:51
Post #13





Grupa: Zarejestrowani
Postów: 143
Pomógł: 19
Dołączył: 7.09.2009
Skąd: Rzeszów

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


Cytat(jacusek @ 26.11.2010, 11:44:28 ) *
Na razie wpadłem wymysliłem, ze moznaby ograniczyć tylko do cyfr i liczb ze znakiem łamania(backslash) i oczywiście z odpowiednią długością inputa i nad tym popracuję.


2 nie przejdzie
czesto są adresy typu 123a/15c
Go to the top of the page
+Quote Post
zordon
post 26.11.2010, 15:25:06
Post #14





Grupa: Zarejestrowani
Postów: 358
Pomógł: 78
Dołączył: 4.11.2008
Skąd: Kraków

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


można łatwo zrobić regułę, która będzie sprawdzała te warianty również ze spacjami, ale ja bym uprościł trochę sprawę i wpisane dane przez użytkownika doprowadził do bardziej eleganckiej postaci, tzn. wywalił wszystkie spacje. Większość użytkowników i tak tego nie zauważy, a nawet jeśli to nie zmienia to znaczenia tej zmiennej.

  1. $string = str_replace(' ', '', $string);
  2.  
  3. var_dump(preg_match('/^[a-zA-Z0-9\/]+$/', $string));


potestuj, powinno działać
jak koniecznie chcesz jeszcze ze spacjami to wystarczy dodać \s(wszystkie białe znaki) do akceptowanych
Go to the top of the page
+Quote Post
jacusek
post 28.11.2010, 16:45:44
Post #15





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

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


@zordon
dzięki o to właśnie chodziło. Na spacje nie będę pozwalał bo i po co. Błędów się i tak przy tym nie ominę bo przejdzie choćby taki numer a27, ale to już do przeżycia.

dla zainteresowanych można to było rozbudować w ten dość banalny sposób. Trochę na okrętkę, ale nareszcie działa tak jak chciałem:
  1. function checkstrNo($z,$form_name){
  2. if(!is_numeric(substr($z, 0,1))){
  3. $tekst="Numer ulicy musi zaczynać się od cyfry";
  4. popup_alert($tekst);
  5. }else{
  6. if(!preg_match('/^[a-zA-Z0-9\/]+$/', $z)){
  7. $tekst="Użyto niedozwolonych znaków w polu " .$form_name;
  8. popup_alert($tekst);
  9. }
  10. }
  11. }
Go to the top of the page
+Quote Post
Fifi209
post 28.11.2010, 18:21:15
Post #16





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

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


Na moje oko wystarczy:

#^[\d]{1,4}/[\d]{1,4}$#



--------------------
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

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: 19.07.2025 - 04:48