Wyrażenia regularne

0

Witam :) mam taki problem
nie wiem jak poprawnie wykonac walidacje formularza
dziala ona tylko dla 1 i ostatniego znaku i nie wiem dla czego :/
przerobiłem ten materiał ale to mi nie pomogło :(
http://4programmers.net/PHP/Wyrażenia_Regularne_(Regular_Expression)

np dla pola autor gdzie dozwolone maja byc litery od a do z i A do -Z oraz polskie znaki diakrytyczne wpiszę imie123a nie wyswietla błędu a powinno

o to kod :
cwiczenie.php

 
<form id="formularz" method ="POST" action="ind.php">

            Isbn<br> <input type="text" name="isbn" value="1"/>
            <br>
            autor<br> <input type="text" name="autor" value="nieznany"/>
            <br>
            tytul<br> <input type="text" name="tytul" value="tytul"/>
            <br>
            cena<br> <input type="text" name="cena" value="20"/>
            <br>
            <br>
            <input type="submit" value="OK" />
</form>

ind.php

function sprawdzaj()
{
    if(strlen($_POST['isbn'])>13)
    {
        echo "Za dlugi isbn!";
        return false;
    }
    if($_POST['isbn']=="")
    {
        echo "isbn jest pusty!";
        return false;
    }
    if (strlen($_POST['autor'])>30)
    {
        echo "Za dlugie immie";
        return false;
    }
    $czy_autor = '/[^a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ ]+$/'; // w tym miejscu nie wiem jak to zrobic dobrze
    if (preg_match($czy_autor,$_POST['autor']))
    {
        echo "W imie tylko litery! preg 1";
        return false;
    }

    return true;
}

sprawdzaj();
 

Z góry dziękuje za pomoc.

0

/[^a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ ]+$/

  • znak początku ciągu (^) masz w nawiasie kwadratowym - umieść go przed. W tym momencie sprawdzana dana ma kończyć się literami lub spacją.

Proponuję:
/^[a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ\s]+$/

Powinno działać, acz nie mogę aktualnie sprawdzić ;)

0

Hmm ;) dziękuje działa ale nie dokońca
np już nie sprawdza tylko 1 i ostaniej litery tylko cały łańcuch lecz gdy wpiszę dowolny polski znak diakrytyczny wyskakuje nadal błąd a nie powinno :(
i nie wiem co z tym zrobic ?

0

proponuje skorzystac z
http://www.spaweditor.com/scripts/regex/
mi zawsze pomagał wyrażeniami

0
Adrian89 napisał(a)

Hmm ;) dziękuje działa ale nie dokońca
np już nie sprawdza tylko 1 i ostaniej litery tylko cały łańcuch lecz gdy wpiszę dowolny polski znak diakrytyczny wyskakuje nadal błąd a nie powinno :(
i nie wiem co z tym zrobic ?

wpisujesz do wyrażenia regularnego znaki w innym kodowaniu niż są wysyłane z formularza

2

BTW: w nowszych wersjach PHP (od 5.1?) w wyrażeniach regularnych dostępne są rozszerzenia unicodowe. Na dobrą sprawdzę, w dzisiejszych czasach i tak zawsze powinieneś używać kodowania UTF-8.

Korzystając z rozszerzeń, możesz zastosować taki wzorzec:

/^[\p{L} ]+$/u

\p{L} oznacza znak unicode, który jest oznaczony jako litera. A więc również polski znak diakrytyczny (ale nie tylko polski -- również niemieckie umlauty itd.!). Flaga u włącza rozszerzenia unicodowe.

W podanym zakresie wstawiłem jeszcze spację, bo masz ją w oryginalnym wyrażeniu regularnym.

0

Oki dzięki wielkie za pomoc :)
Chyba już sobie poradze.
Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1