reguliere expressies en verbeterpunten

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dylan PHP

Dylan PHP

16/12/2012 13:17:28
Quote Anchor link
Ik ben bezig met een scriptje waar mensen een artikel kunnen schrijven met een backlink naar hun website. Nu is het bijna klaar en ben ik bezig om de puntjes op de i te zetten. Hieronder heb ik een stukje uit het script gepakt (er zijn nog meer if statements maar dit zijn de belangrijkste). Eigenlijk ben ik opzoek naar commentaar hierop, wat kan er beter? Wat ik me ook al een tijdje afvraag is hoe het zit met de reguliere expressies, is het mogelijk om syntax errors te genereren door speciale tekens in te voeren? Ik heb hier zelf niet heel veel kaas van gegeten maar wil natuurlijk wel dat alles zo soepel en netjes mogelijk is.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
    if(empty($naam) OR !preg_match("/^[a-zA-Z0-9_-\s\.\,\?\!ëËéÉêÊïÏíÍöÖóÓäÄáÁ]+$/", $naam))
        $error_array[] = "Vul uw naam of bedrijfsnaam in";
    if(empty($email) OR !filter_var($email, FILTER_VALIDATE_EMAIL))
        $error_array[] = "Vul een geldig email adres in";
    if(!empty($postcode) && !preg_match('/^[1-9][0-9]{3} ?[a-z]{2}$/i', $postcode))
        $error_array[] = "Vul een geldige postcode in";
    if(empty($website) OR !filter_var($website, FILTER_VALIDATE_URL))
        $error_array[] = "Vul een geldige URL in naar uw website";
    if(!empty($facebook) AND !filter_var($facebook, FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED) OR !empty($facebook) AND strpos($facebook, "facebook.com") === FALSE)
        $error_array[] = "Vul een geldige URL in naar uw Facebook profiel";
    if(!empty($twitter) AND !filter_var($twitter, FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED) OR !empty($twitter) AND strpos($twitter, "twitter.com") === FALSE)
        $error_array[] = "Vul een geldige URL in naar uw Twitter account";
    if(empty($keywords) OR !preg_match("/^[a-zA-Z0-9\-\,\s\.\?\!ëËéÉêÊïÏíÍöÖóÓäÄáÁ]+$/", $keywords) OR strlen($keywords) > 100)
        $error_array[] = "Vul keywords in gescheiden door een komma";
    if(empty($description) OR strlen($description) > 156 OR strlen($description) < 50 OR !preg_match("/^[a-zA-Z0-9\-\,\s\.\?\!ëËéÉêÊïÏíÍöÖóÓäÄáÁ]+$/", $description))
        $error_array[] = "Gebruik minstens 50 en maximaal 156 tekens in de description";
    if(empty($artikel) OR strlen(htmlspecialchars_decode($artikel)) > 1750 OR strlen(htmlspecialchars_decode($artikel)) < 500)
        $error_array[] = "Gebruik minstens 500 en maximaal 1750 tekens in het artikel";
    if(preg_match("/(http\:\/\/|https\:\/\/|ftp:\/\/|ftps:\/\/|www\.)/i", $artikel))
        $error_array[] = "Het gebruiken van links in een artikel is niet toegestaan";
?>


En dan als laatste, ik laat mensen een postcode invoeren, de ene keer voert iemand 1000AB in en de andere keer 1000 AB, hoe kan ik deze spatie filteren en dan er weer inzetten na het 4e teken in de string? Zodat alle postcodes hetzelfde worden opgeslagen!

Met smart wacht ik op jullie (kritische) antwoorden en vragen! :)

Toevoeging op 16/12/2012 19:28:59:

Sorry maar, *bump*, er moeten toch wel wat kritische ogen op phphulp.nl zijn? De gedachte achter de if statements lijken mij duidelijk alleen ik denk dat het beter kan...
Gewijzigd op 16/12/2012 19:29:28 door Dylan PHP
 
PHP hulp

PHP hulp

22/12/2024 07:40:49
 
Ivo Breeden

Ivo Breeden

16/12/2012 21:32:21
Quote Anchor link
Nou het ziet er best aardig en goed doordacht uit.
Maar als je toch wat opmerkingen wilt hebben valt mijn oog op de diakritische tekens. Hoe zijn die gecodeerd? Waarschijnlijk in UTF8, tegenwoordig. En als dat het geval is dan moet je waarschijnlijk de "u" pattern modifier toevoegen.
En wat is het probleem met die postcode? Gewoon spaties strippen dacht ik.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$postcode
=str_replace(' ', '', $postcode);
?>

En natuurlijk wil je ook checken met preg_match dat het resultaat bestaat uit 4 letters en 2 cijfers.
 
Dylan PHP

Dylan PHP

16/12/2012 22:21:10
Quote Anchor link
Bedankt voor je reactie :)
De postcode heb ik inmiddels opgelost als volgt
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$string
= "1234AB";
$char = " ";
$string = $string[4] != ' ' ? substr($string, 0, 4) . $char . substr($string, 4) : $string;
echo $string;
?>


Wat bedoelde je precies met dat coderen?
Gewijzigd op 16/12/2012 22:21:36 door Dylan PHP
 
Ivo Breeden

Ivo Breeden

17/12/2012 11:13:39
Quote Anchor link
Donald, met coderen bedoel ik de character set. Als je gekozen hebt voor UTF-8 (een moderne standaard) dan wordt een ë (e met trema) gecodeerd met twee bytes: 0xC3 en 0xAB. Als je dan de regular expression "/[a-zë]/" dan verwacht je dat dit betekent: de letters a-z of ë. Maar dat kan dan wel opgevat worden als: de letters a-z of 0xC3 of 0xAB. Je kunt aangeven dat de regular expression UTF-8 tekens bevat met de regular expression: "/[a-zë]/u". In dat geval worden multi-byte characters als één character behandeld.
 
Dylan PHP

Dylan PHP

17/12/2012 11:43:19
Quote Anchor link
Oké bedankt, heb het toegevoegd :)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.