login  Naam:   Wachtwoord: 
Registreer je!
 Forum

reguliere expressie

Offline tbk - 21/02/2007 12:32
Avatar van tbkPHP beginner ik ben bezig met een formulier te verwerken en ik wil natuurlijk een kleine beveiliging...

daarom gebruikte ik volgend stukje:

  1. <?
  2. if( ereg("[a-z]", $_POST['a']) AND !empty($_POST['a']) ){
  3.  
  4. echo "gelukt";
  5.  
  6. }else{
  7.  
  8. echo "niet";
  9. }?>


als ik een getal invul dan zegt hij "niet", maaar als ik typ blaat156 dan zegt hij gelukt... dit is echter niet de bedoeling veronderstel ik, hoe los ik dat op?

17 antwoorden

Gesponsorde links
Offline marten - 21/02/2007 12:43
Avatar van marten Beheerder
  1. <?
  2. if(!empty($_POST['a'])) {
  3. if(ereg("^[a-z]", $_POST['a'])) {
  4. echo 'gelukt';
  5. } else {
  6. echo 'Niet gelukt';
  7. }
  8. }
  9. ?>


Probeer het zo eens
Offline Thomas - 21/02/2007 12:43 (laatste wijziging 21/02/2007 12:44)
Avatar van Thomas Moderator Je matcht maar één karakter.

Als je wilt dat je string enkel uit ten minste X karakters bestaat, dan doe je dit als volgt:

enkel: ^ geeft het begin van de input aan, $ geeft het einde van de input aan. Alles hiertussen moet uit karakters bestaan ([a-z]).

ten minste: Dit kun je aan geven met {a, b} (minimaal a, maximaal b karakters - b kan ook open gelaten worden).

Je wilt deze match case-insensitive laten zijn, dit doe je met de /i-modifier.

De controle wordt aldus (empty is niet nodig, en er van uitgaanda dat je invoer minimaal uit 6 karakters bestaat):
  1. <?php
  2. if(preg_match("/^[a-z]{6,}$/i", $_POST['a']))
  3. {
  4. ...
  5. }
  6. ?>
Offline tbk - 21/02/2007 13:40 (laatste wijziging 21/02/2007 13:49)
Avatar van tbk PHP beginner waarom gebruik je preg_match() en niet ereg()?

enuhm, ik wil ook dat men spaties kan gebruiken en een een streepje: "-" dit dus(het gaat over namen)
Offline Rik - 21/02/2007 13:51
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Dan gebruik je \w ipv [a-z].
Offline tbk - 21/02/2007 13:52 (laatste wijziging 21/02/2007 14:45)
Avatar van tbk PHP beginner ^\w{6,}$ dan?

heb nu dit:
  1. function textcheck($text){
  2.  
  3. if(ereg("^[a-zA-Zéèà]{3,}$", $text) AND !empty($text)){
  4.  
  5. return true;
  6.  
  7. }else{
  8.  
  9. return false;
  10.  
  11. }
  12. }


werkt prima maar als ik nu wil dat men ook een een streepje kan of een spatie wat doe ik dan?

heb dit al geprobeerd: ereg("^[a-zA-Zéèà[[:space]]]{3,}$", $text)
maar het helpt enkel men script om zeep
Offline Rik - 21/02/2007 14:52
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Volgens mij is het [:space:], maar je kan er ook dit van maken:
  1. function textcheck($text){
  2. if(eregi("^[\wéèà]{3,}$", $text) AND !empty($text)){
  3. return true;
  4. }else{
  5. return false;
  6. }
  7. }
Offline Thomas - 21/02/2007 14:55
Avatar van Thomas Moderator Euh... Een naam die enkel uit spaties kan bestaan?
w00t?
Offline tbk - 21/02/2007 14:58 (laatste wijziging 21/02/2007 15:03)
Avatar van tbk PHP beginner lol:D kan er ook niet veel van hé:D maar heb het zo gedaan...

en het werkt...

  1. ereg("^[a-zA-Zéèà\-\ ]{3,}$", $text)


nuja dacht ik toch:D nu wil het liggend streepje niet mee werken

  1. ereg("^[a-zA-Zéèà[:space:]\-]{3,}$", $text)

zowerkt hj weer wel;) is dit een goede vorm?
Offline Rik - 21/02/2007 15:09
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
http://en.wikipedia.org/wiki/Regular_expression
Citaat:
[:space:] [ tnrfv] blank (whitespace)


Dat matcht dus ook enters en tabs...
Offline tbk - 21/02/2007 15:16
Avatar van tbk PHP beginner nja weet je een betere manier? als iemand nu Van Holsbeke ofzo noemt...
Offline Ibrahim - 21/02/2007 16:16
Avatar van Ibrahim PHP expert wat jij wilt is een naam matchen? maar die naam mag ook een spatie bevatten...?
Dit werkt, voor de meeste namen toch wel 

  1. <?php
  2. function checkNaam( $naam )
  3. {
  4. $pattern = '~^([a-zA-Z(é|è|à| )?]){6,20}$~'; // limiet is 20, dat is toch wel zeker een redelijk lange naam
  5.  
  6. return ( preg_match( $pattern, $naam ) ) ? true : false;
  7. }


En ik zou eerder preg_match gebruiken, iemand had me uitgelegd dat dat veel sneller is dan de ereg functie
Offline tbk - 21/02/2007 16:51
Avatar van tbk PHP beginner en bij een liggend streepje, is dat dan:

  1. $pattern = '~^([a-zA-Z(é|è|à| |-)?]){6,20}$~'; // limiet is 20, dat is toch wel zeker een redelijk lange naam

?
Offline Ibrahim - 21/02/2007 16:52
Avatar van Ibrahim PHP expert ja dat klopt
Offline tbk - 21/02/2007 19:46
Avatar van tbk PHP beginner
  1. function textcheck($text){
  2.  
  3. if(preg_match('~^([a-zA-Z(é|è|à|-| )?]){3,}$~',$text) AND !empty($text)){
  4.  
  5. return true;
  6.  
  7. }else{
  8.  
  9. return false;
  10.  
  11. }
  12. }


heb nu dit maar het werkt nog niet al te goed...
Offline Rik - 21/02/2007 21:10
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Waarom installeer je niet Regular Expression Editor? Dan kan je 'live' je regex testen.

Over jouw regex, ik weet niet of je haakjes binnen een class mag gebruiken, volgens mij niet.
Offline Ibrahim - 21/02/2007 21:16
Avatar van Ibrahim PHP expert Je hebt helemaal gelijk boukefalos ik was dat totaal vergeten
backreferenties en parentheses ( ) mogen niet binnen een character class.

Ik zal zodadelijk eens zien hoe de regex anders moet, maar eerst even een pauze nemen 
Offline Rik - 21/02/2007 21:24 (laatste wijziging 21/02/2007 21:27)
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Ik zou hem dan zo maken:
  1. <?php
  2. function check($str)
  3. {
  4. return preg_match('/^([a-zàáäèéäòóö\- ]){3,}$/i', $str) ? true : false;
  5. }
  6. ?>


Edit:
Zo is hij hoofdletterongevoelig, als je nette namen wilt kan je dit gebruiken:
  1. <?php
  2. ?>
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.301s