Recherche chaine decaractere [Résolu]

Signaler
Messages postés
436
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
2 juillet 2014
-
Messages postés
436
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
2 juillet 2014
-
Bonjour

J'ai une question toute bete, je souhaite faire un controle de chaine de caractere, controler que la chaine n'a uniquement que des caracteres alphanumeriques plus quelques exception comme le underscore.
J'ai fait :
$Chaine = "salut";
if( preg_match("/[a-z0-9]/", $Chaine ) )
{
  echo "Chaine OK";
}
else
{
  echo "Chaine NON OK";
}


Peut importe ce que je rajoute dans $Chaine il me renvoi toujours OK (dans l'exemple ci-dessous je en teste uniquement que les caracteres alphanumeriques).
Je voudrais que dès que je rajoute un accent ou une parenthese par exemple, ça me renvoie faux, comment puis-je faire cela svp ?

Merci

7 réponses

Messages postés
197
Date d'inscription
mardi 20 janvier 2004
Statut
Membre
Dernière intervention
20 février 2013
1
Bonjour,

tente de remplacer /[a-z0-9]/ par /^[a-z0-9]*$/

bonne journée
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
16
Bonjour
mais il te faut peu etre aussi les Majuscules et l'espace ...
a++

un petit snippet
<?php
function ote_accent($str){
$ch =  strtr($str,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
return $ch;
}

function check1($pattern,$Chaine){

  if(preg_match($pattern,$Chaine)){
  return " Chaine OK ";
  }else{
  return "Chaine NON OK";
  }

}

// /^[a-z0-9_-]*$/ pcre

if(isset($_POST['tocheck']) && !empty($_POST['tocheck'])){
$chaine =$_POST['tocheck'];
//$chaine=ote_accent($chaine);
echo check1($pattern='/^[a-zA-Z 0-9_-]*$/',$chaine); //+ espace et majuscules
}else{
echo $form = '<form method="post" action="">
test 

</form>';
}
?>



Bonne programmation !
Messages postés
436
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
2 juillet 2014
1
Hello !

Oui ça marche niquel !
Donc si je fais
/^[a-z0-9_-]*$/

ça devrait marcher, en incluant le tiret et le underscore ?
Messages postés
197
Date d'inscription
mardi 20 janvier 2004
Statut
Membre
Dernière intervention
20 février 2013
1
re,

normalement oui ça devrait marcher
Messages postés
436
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
2 juillet 2014
1
Bonjour !

Non surtout pas les espaces !! car c'est pour un login, et dans le login je n'accepte pas les espaces c'est trop dangereux pour la suite

Mais sinon le reste oui c'est ça ! merci
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
27
Salut,


... au passage :
Comme déjà dit /^[a-z0-9]*$/ ne matchera pas les accents, ... mais matchera une chaîne vide

Inutile donc de faire un test !empty(...), et encore moins d'utiliser la fonction ote_accent() :
if (isset($_POST['tocheck']) && preg_match('`^[\w-]+$`', $_POST['tocheck'])) {
    echo 'Chaine OK';
} else {
    echo 'Chaine NON OK';
}


NB : si la regex ne match pas les accents tu as sans doute un pb avec les locale (cf setlocale()) ou il te faudra spécifier l'option 'u' ('`^[\w-]+$`u')

Et puisqu'il s'agit d'un login il peut être utile de définir un nombre de caractères mini et maxi, style '`^[\w-]{4,50}$`'

Cordialement,

Kohntark -
Messages postés
436
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
2 juillet 2014
1
Merci pour ces précisions ;)