Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenia regularne, bądź też nie...
Forum PHP.pl > Forum > Przedszkole
patigo
Witam,
Mam trochę obawy co do słuszności poruszana tego tematu, ale szukałem co nie co i czuję pewien niedosyt, a w manualu już się pogubiłem. Będe wdzięczny za pomoc.

Chodzi o najprostsze weryfikacje danych pochodzących z formularzy, np:

-weryfikacja imienia i nazwiska wpisywanego do jednego "inputa" wzór np:
Adam Adamowicz (pamiętając o tym że nazwisko może być dwuczłonowe, lub ktoś może podać dwa imoina)

-weryfikacja kodu pocztowego i miejscowości np:
00-950, warszawa (pamiętajac że miasto może skałdać się z dwuch słów np zielona góra, lub drugi człon może być skrótem zakończony kropką np. Środa Wlkp.)

generalnie gubie się przy funkcjach eregi i preg_match oraz przy kożystaniu ze znaków specjalnych poza nawiasami kwadratowymi oraz w połączeniu z nimi.

np do weryfikacji kodu i miejscowości stworzyłem coś takiego:
  1. <?php
  2. preg_match( '/^[0-9]{2}-[0-9]{3},$[:alpha:][:space:][:alpha:]/', $kodmiejscowosc)
  3. ?>

ale niestety nie dziala mi to coś.

Pozdrawiam
Ociu
Najprościej można napisać tak:
  1. <?php
  2. function checkZipCode($code) {
  3. if(!strstr('-', $code)) return false;
  4. $sCode = explode('-', $code);
  5. if(count($sCode[0]) <> 2 || count($sCode)<>3) return false;
  6. }
  7.  
  8. function checkString( $str ) {
  9. if(count($str) < 3) return false;
  10. if(!is_string($str)) return false;
  11. }
  12. ?>
Tio
Cytat(patigo @ 2006-02-01 13:24:08)
  1. <?php
  2. preg_match( '/^[0-9]{2}-[0-9]{3},$[:alpha:][:space:][:alpha:]/', $kodmiejscowosc)
  3. ?>

Pomieszałesz składnie pcre(preg_match) z regexem(eregi).

Kod powinie tak wygladac
  1. <?php
  2. preg_match( '/^[0-9]{2}-[0-9]{3}/', $kodmiejscowosc)
  3. ?>
patigo
No właśnie o to chodzi że składnia chyba mi sie miesza i nie moge znaleźć sensownego wyjaśneinia, to już działa
  1. <?php
  2.  
  3. preg_match( '/^[0-9]{2}-[0-9]{3}/', $kodmiejscowosc);
  4.  
  5. ?>
Ale dotyczy tylko samego kodu, a ja chciałem żeby jeszcze dotyczył nazwy miejscowości która może być dwuczłonowa, czy będzie to coś takiego:
  1. <?php
  2.  
  3. preg_match( '/^[0-9]{2}-[0-9]{3}, [a-zA-Z]/', $kodmiejscowosc);
  4.  
  5. ?>

questionmark.gif
crash
A nie starczy Ci po prostu coś takiego:
  1. <?php
  2. preg_match( '/^[0-9]{2}-[0-9]{3}, [\w\-\. ]+$/i', $kodmiejscowosc);
  3. ?>
?
patigo
No nie wiem, coś tu chyba nie gra, bo jak wpisuje np 12-942, Wołmin to przechodzi i jest ok ale jak wpisze samo 12-923 to też jest OK oraz jak wpisze 11111111111111 dfsdf to też jest OK.....
crash
Nie wiem jak Ty tego używasz, zobacz (lekko zmodyfikowana):
  1. <?php
  2. $regex = '/^[0-9]{2}-[0-9]{3}, [\w]+[\w\-\. ]+?$/i';
  3.  
  4. var_dump( preg_match( $regex, '41-200, Sosnowiec' ) );  // int(1) - OK
  5. var_dump( preg_match( $regex, '41-20, Sosnowiec' ) ); // int(0) - Bad
  6. var_dump( preg_match( $regex, '41-200' ) ); // int(0) - Bad
  7. var_dump( preg_match( $regex, '41-20, 123' ) ); // int(0) - Bad
  8. var_dump( preg_match( $regex, '12-345, Gorzów Wlkp.' ) ); // int(1) - OK
  9. var_dump( preg_match( $regex, '54-321, Jakieś Miasto' ) ); // int(1) - OK
  10. var_dump( preg_match( $regex, '54-321, ' ) );  // int(0) - Bad
  11. var_dump( preg_match( $regex, '54-321, Nazwa-Myślnik' ) ); // int(1) - OK
  12. ?>
patigo
Nie wiem co jest nie tak już się gubie, zaraz mnie szlka trafi wezme siekiere i porąbie kompa z nerwów....
tak wygląda cały kod formularza...
  1. <html>
  2. <head>
  3.   <link rel="stylesheet" href="styleZamowienie.css" type="text/css">
  4. </head>
  5. <body><?
  6. if(isset($_POST[action])){
  7.     
  8.     //Tak formularz został wysłany
  9.     //Przypisanie zmiennych
  10.     $imienazwisko = $_POST[imienazwisko];
  11.     $adres = $_POST[adres];
  12.     $kodmiejscowosc = $_POST[kodmmiejscowosc];
  13.     $email = $_POST[email];
  14.     //akcja w zależności od wybtanej opcji
  15.     if(strlen($imienazwisko)>=&& strlen($imienazwisko<=40)){
  16.         if ((ereg('[[:alpha:]]', $imienazwisko))){
  17.             $imienazwisko = "OK";
  18.         }else{
  19.             $imienazwisko = "Złe dane";
  20.         }}else{
  21.             $imienazwisko = "Złe dane";
  22.         }
  23.     if(preg_match( '/^[0-9]{2}-[0-9]{3}, [\w]+[\w\-\. ]+?$/i', $kodmiejscowosc)){
  24.         $kodmiejscowosc='OK';
  25.     }else{
  26.         $kodmiejscowosc='Zły format';
  27.     }
  28.     echo '
  29.     <form action="zamowienie1.php" method="post">
  30.     <div id="container">
  31.     <div id="top">Twoje zamówienie:</div>
  32.     <!-- Lewa strona-->
  33.     <div id="mainL">
  34.  
  35.     <div class="daneL">
  36.     <span class="main">Imię i Nazwisko:</span>
  37.     </div>
  38.     <div class="daneL">
  39.     <span class="main">Ulica i nr domu/mieszkania:</span>
  40.     </div>
  41.     <div class="daneL">
  42.     <span class="main">Kod i Miejscowość:</span>
  43.     </div>
  44.     <div class="daneL">
  45.     <span class="main">Adres e-mail:</span>
  46.     </div>
  47.     </div>
  48.  
  49.     <!--Prawa strona-->
  50.     <div id="mainR">
  51.  
  52.     <div class="daneP"><span class="main" style="font-weight: bold;">'.$imienazwisko.'</span>
  53.     </div>
  54.     <div class="daneP"><span class="main" style="font-weight: bold;">'.$adres.'</span>
  55.     </div>
  56.     <div class="daneP"><span class="main" style="font-weight: bold;">'.$kodmiejscowosc.'</span>
  57.     </div>
  58.     <div class="daneP"><span class="main" style="font-weight: bold;">'.$email.'</span>
  59.     </div>
  60.     </div>
  61.  
  62.     <div id="stopka"><input type="submit" name=action" value="Zmień">&nbsp;<input type="submit" name="action" value="Zatwierdź"></div>
  63.  
  64.     </div>
  65.     <input type="hidden" name="imienazwisko" value="'.$imienazwisko.'">
  66.     <input type="hidden" name="adres" value="'.$adres.'">
  67.     <input type="hidden" name="kodmiejscowosc" value="'.$kodmiejscowosc.'">
  68.     <input type="hidden" name="email" value="'.$email,'"></form>';
  69.  
  70. }else{
  71.     echo '
  72.     <form action="zamowienie1.php" method="post">
  73.     <div id="container">
  74.     <div id="top">Formularz zamówienia:</div>
  75.     <!-- Lewa strona-->
  76.     <div id="mainL">
  77.     
  78.     <div class="daneL">
  79.     <span class="main">Imię i Nazwisko:</span><br>
  80.     <span class="mini">np. Adam Kowalski</span>
  81.     </div>
  82.     <div class="daneL">
  83.     <span class="main">Ulica i nr domu/mieszkania:</span><br>
  84.     <span class="mini">np. Armii Polskiej 12/12</span>
  85.     </div>
  86.     <div class="daneL">
  87.     <span class="main">Kod i Miejscowość:</span><br>
  88.     <span class="mini">np. 00-999, Warszawa</span>
  89.     </div>
  90.     <div class="daneL">
  91.     <span class="main">Adres e-mail:</span><br>
  92.     <span class="mini">np. jan_kowalski@domena.pl</span>
  93.     </div>
  94.     <div class="daneL">
  95.     <span class="main">Preferowany rodzaj płatności:</span><br>
  96.     <span class="mini">wybierz z listy</span>
  97.     </div>
  98.     
  99.     </div>
  100.     
  101.     <!--Prawa strona-->
  102.     <div id="mainR">
  103.     
  104.     <div class="daneP"><input type="text" name="imienazwisko" value="">
  105.     </div>
  106.     <div class="daneP"><input type="text" name="adres" value="">
  107.     </div>
  108.     <div class="daneP"><input type="text" name="kodmiejscowosc" value="">
  109.     </div>
  110.     <div class="daneP"><input type="text" name="email" value="">
  111.     </div>
  112.     </div>
  113.     
  114.     <div id="stopka"><input type="reset" value="Czyść">&nbsp;<input type="submit" name="action" value="Dalej >>"></div>
  115.     
  116.     </div></form>';}
  117. ?>
  118. </BODY>
  119. </HTML>


tak wygląda plik ze stylami:
Kod
a co ma do tego CSS... Wycinam. ~crash


Nie działa zarówno weryfikacja imienia i nazwiska jaki i kodu i miejscowoścci...
crash
  1. <?php
  2. $_POST[kodmmiejscowosc];
  3. ?>

Znajdź tu błąd smile.gif Btw. klucze tablicy należy ujmować w cudzysłowia/apostrofy...
patigo
Spoko jeden krok do przodu, najgorsze są zapętlenia w takich pierdołach...które jak się okazuje pierdolami nie są smile.gif

ale mam jeszcze pytanko co do weryfikacji imienia i nazwiska, teraz zrobiłem cos takiego:
  1. <?php
  2. if ((ereg("^[[:alpha:]]+[[:space:]]*[[:alpha:]]+$", $imienazwisko))){
  3. $imienazwisko = "OK";
  4. }else{
  5. $imienazwisko = "Złe dane";
  6. ?>

A jak to ująć jeżeli ktoś poda np dwa imiona i nazwisko??
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.