PHP expressions reguliere

Résolu/Fermé
underscape Messages postés 57 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 14 août 2009 - 16 juil. 2009 à 12:49
underscape Messages postés 57 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 14 août 2009 - 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?
A voir également:

7 réponses

Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
16 juil. 2009 à 12:58
une question : Tu veux bloquer a un combien d'underscrores maximum ?
0
underscape Messages postés 57 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 14 août 2009 3
16 juil. 2009 à 16:56
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 :
https://www.commentcamarche.net/contents/803-php-expressions-regulieres

et j'ai vu ceci "[:punct:]";
cela va autorisé toutes les lettres accentués dans ma chaine?
0
underscape Messages postés 57 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 14 août 2009 3
16 juil. 2009 à 17:02
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 éèàç?
0
underscape Messages postés 57 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 14 août 2009 3
16 juil. 2009 à 18:15
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....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
16 juil. 2009 à 18:18
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 !
0
underscape Messages postés 57 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 14 août 2009 3
16 juil. 2009 à 19:12
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 :)
0
underscape Messages postés 57 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 14 août 2009 3
16 juil. 2009 à 23:31
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
0