Les Allergies
Alimentaires
Posez votre question Signaler

PHP expressions reguliere [Résolu]

underscape 57Messages postés 6 juin 2009Date d'inscription - Dernière réponse le 16 juil. 2009 à 23:31
Bonjour,
j'ai une chaine a anlysé via un formulaire j'ai donc ecris ceci :
<?
if (ereg("^[a-z]{1}+[a-z0-9]{4,23}+[0-9a-z]{1}$",$p)==false) { echo "oui"; } else { echo "non;}
?>
visiblement cela fonctionne car ca oblige a avoir une lettre ou un chiffre en 1ere position puis chiffres et lettre ensuite entre 4 et 23 caracteres puis finir par un chiffre ou une lettre.
Mon soucis est tout bete je voudrais autorisé l'underscore mais pas que le visiteur me le mette 23 fois!
genre "a____________________________d"
alors j'ai testé ceci :
<?
if (ereg("^[a-z]{1}+[a-z0-9_]{4,23}+[0-9a-z]{1}$",$p)==false) { echo "oui"; } else { echo "non;}
?>
mais evidemment la il peu :(
je suis pas tres douée dans les expressions reguliere j'ai compris en gros mais ... vraiment en gros
un p'ti coup de main siouplait?
Lire la suite 

PHP expressions reguliere »

7 réponses
Réponse
+0
moins plus
une question : Tu veux bloquer a un combien d'underscrores maximum ?
Ajouter un commentaire
Réponse
+0
moins plus
parceque on peu faire ca??
lol je suis vraiment debutante

Et bien disons que j'aurais aimé autorisé un anderscore et pas au debut de la chaine ni a la fin.

et pendant que j'y suis question idiote, j'ai fais mon petit bout de code avec la page de commentcamarche.net voici le lien pour ceux que ca interresse :
http://www.commentcamarche.net/contents/php/phpreg.php3

et j'ai vu ceci "[:punct:]";
cela va autorisé toutes les lettres accentués dans ma chaine?
Ajouter un commentaire
Réponse
+0
moins plus
euh? c'est ponctuation donc forcement c'est pas les caracteres accentués.. allalala
donc je modifie il y'a pas l'equivalent pour autorisé par exemple tout les éèàç?
Ajouter un commentaire
Réponse
+0
moins plus
j'ai modifié mon code par ceci plus efficace que "ereg"
Et j'ai vu que Php va supprimé cette fonction alors...


<?
$p = utf8_encode($p);


if (preg_match("#^[a-z]{1}+([a-z0-9_àéèç]{4,23})+[0-9a-z]{1}$#",$p1)== false)
{ echo "</p>non";
} else {
echo "</p>c'est bon";
};
?>

bon y'a certainement mieux mais bon, en attendant de trouver comment limité les underscores....
Ajouter un commentaire
Réponse
+0
moins plus
Bin, tu peux faire un test en amont ou en aval pour les underscores,

Avec comme pattern : $sParttern = "/[_ ]{2,}/"; //Cherche au moins 2 underscrores

ou meme tu peut direct faire un preg_replace avec en $sReplace = "_";

EnjoY !
Ajouter un commentaire
Réponse
+0
moins plus
j'ai lu je sais plus ou que pour limiter le nombre caracteres equivalent on doit mettre un point.
je vais testé ton bout de code sinon effectivement je pourrai creer une fonction pour detecter le nombre d'underscore et les supprimé...
bon c'est pas gagné je vais testé
merchi :)
Ajouter un commentaire
Réponse
+0
moins plus
bon après avoir pas mal tournée en bourrique j'ai finalement opté pour ce code qui me va...

Y'a certainement mieux mais bon.. j'en ai marre lol
je post ici si cela peu aider quelqu'un

<?
//pour compter les caractères d'une chaine, ici underscore a vous d'y mettre ce que vous voulez d'autres...
$CompteUnderscore = preg_match_all("(\_)",$Pseudooo, $out, PREG_PATTERN_ORDER);

if ($CompteUnderscore >1) { etc......

//et pour evité les doublons j'ai ceci


// Si 3 chiffres identique d'affilé alors il en laisse 1
function PasDeCaIici( $toto, $maxCarac = 3) {
$var = '0123456789';
$recherche = array();
$remplace = array();

for($i=0,$len=strlen($var);$i<$len;++$i) {
$recherche[] = '~'.$var[$i].'{'.$maxCarac.',}~i';
$remplace[] = $var[$i];
}

return preg_replace( $recherche, $remplace, $toto);
}
?>

voilou
Ajouter un commentaire
Ce document intitulé « PHP expressions reguliere » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?