reguliere expressie
tbk - 21/02/2007 12:32
PHP beginner
ik ben bezig met een formulier te verwerken en ik wil natuurlijk een kleine beveiliging...
daarom gebruikte ik volgend stukje:
<?
if( ereg("[a-z]", $_POST['a']) AND !empty($_POST['a']) ){
echo "gelukt";
}else{
echo "niet";
}?>
<?
if ( ereg ( "[a-z]" , $_POST [ 'a' ] ) AND
! empty ( $_POST [ 'a' ] ) ) {
} else {
} ?>
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
marten - 21/02/2007 12:43
Beheerder
<?
if(!empty($_POST['a'])) {
if(ereg("^[a-z]", $_POST['a'])) {
echo 'gelukt';
} else {
echo 'Niet gelukt';
}
}
?>
<?
if ( ! empty ( $_POST [ 'a' ] ) ) { if ( ereg ( "^[a-z]" , $_POST [ 'a' ] ) ) { } else {
}
}
?>
Probeer het zo eens
Thomas - 21/02/2007 12:43 (laatste wijziging 21/02/2007 12:44)
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):
<?php
if(preg_match("/^[a-z]{6,}$/i", $_POST['a']))
{
...
}
?>
tbk - 21/02/2007 13:40 (laatste wijziging 21/02/2007 13:49)
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)
tbk - 21/02/2007 13:52 (laatste wijziging 21/02/2007 14:45)
PHP beginner
^\w{6,}$ dan?
heb nu dit:
function textcheck($text){
if(ereg("^[a-zA-Zéèà]{3,}$", $text) AND !empty($text)){
return true;
}else{
return false;
}
}
function textcheck( $text ) {
if ( ereg ( "^[a-zA-Zéèà]{3,}$" , $text ) AND
! empty ( $text ) ) {
return true ;
} else {
return false ;
}
}
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
Rik - 21/02/2007 14:52
Crew algemeen
Volgens mij is het [:space:], maar je kan er ook dit van maken:
function textcheck($text){
if(eregi("^[\wéèà]{3,}$", $text) AND !empty($text)){
return true;
}else{
return false;
}
}
function textcheck( $text ) {
if ( eregi ( "^[\wéèà]{3,}$" , $text ) AND
! empty ( $text ) ) { return true ;
} else {
return false ;
}
}
Thomas - 21/02/2007 14:55
Moderator
Euh... Een naam die enkel uit spaties kan bestaan?
w00t?
tbk - 21/02/2007 14:58 (laatste wijziging 21/02/2007 15:03)
PHP beginner
lol:D kan er ook niet veel van hé:D maar heb het zo gedaan...
en het werkt...
ereg("^[a-zA-Zéèà\-\ ]{3,}$", $text)
ereg ( "^[a-zA-Zéèà\-\ ]{3,}$" , $text )
nuja dacht ik toch:D nu wil het liggend streepje niet mee werken
ereg("^[a-zA-Zéèà[:space:]\-]{3,}$", $text)
ereg ( "^[a-zA-Zéèà[:space:]\-]{3,}$" , $text )
zowerkt hj weer wel;) is dit een goede vorm?
tbk - 21/02/2007 15:16
PHP beginner
nja weet je een betere manier? als iemand nu Van Holsbeke ofzo noemt...
Ibrahim - 21/02/2007 16:16
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
<?php
function checkNaam( $naam )
{
$pattern = '~^([a-zA-Z(é|è|à| )?]){6,20}$~'; // limiet is 20, dat is toch wel zeker een redelijk lange naam
return ( preg_match( $pattern, $naam ) ) ? true : false;
}
<?php
function checkNaam( $naam )
{
$pattern = '~^([a-zA-Z(é|è|à| )?]){6,20}$~' ; // limiet is 20, dat is toch wel zeker een redelijk lange naam
return ( preg_match ( $pattern , $naam ) ) ?
true : false ; }
En ik zou eerder preg_match gebruiken, iemand had me uitgelegd dat dat veel sneller is dan de ereg functie
tbk - 21/02/2007 16:51
PHP beginner
en bij een liggend streepje, is dat dan:
$pattern = '~^([a-zA-Z(é|è|à| |-)?]){6,20}$~'; // limiet is 20, dat is toch wel zeker een redelijk lange naam
$pattern = '~^([a-zA-Z(é|è|à| |-)?]){6,20}$~' ; // limiet is 20, dat is toch wel zeker een redelijk lange naam
?
Ibrahim - 21/02/2007 16:52
PHP expert
ja dat klopt
tbk - 21/02/2007 19:46
PHP beginner
function textcheck($text){
if(preg_match('~^([a-zA-Z(é|è|à|-| )?]){3,}$~',$text) AND !empty($text)){
return true;
}else{
return false;
}
}
function textcheck( $text ) {
return true ;
} else {
return false ;
}
}
heb nu dit maar het werkt nog niet al te goed...
Rik - 21/02/2007 21:24 (laatste wijziging 21/02/2007 21:27)
Crew algemeen
Ik zou hem dan zo maken:
<?php
function check($str)
{
return preg_match('/^([a-zàáäèéäòóö\- ]){3,}$/i', $str) ? true : false;
}
?>
<?php
function check( $str )
{
return preg_match ( '/^([a-zàáäèéäòóö\- ]){3,}$/i' , $str ) ?
true : false ; }
?>
Edit:
Zo is hij hoofdletterongevoelig, als je nette namen wilt kan je dit gebruiken:
<?php
ucfirst(strtolower($str));
?>
Gesponsorde links
Dit onderwerp is gesloten .