REGEX

Résolu
Bonjour,
Je voudrais créer une Regex qui exclut tout les caractères spéciaux sauf le "_", qui autorise le lettres en majuscules et les chiffres. De plus, le "_" n'a pas le droit d'être au début ni à la fin et a le droit d'être utilisé qu'une seule fois. Par exemple, elle doit reconnaitre : "aZ_78abc" mais pas "_Abc1" ni "3_ab_c".

Je veux l'insérer dans cette structure :


if (preg_match("# MA REGEX #", $texte))
{

echo 'Correct';

}

else
{

echo 'Erreur';

}



Bonne soirée.
Configuration: Windows Vista
Firefox 3.0.6

6 réponses

  1. Contributeur
    je veux pourvoir mettre des lettres minuscules ET majuscules.
    donc on peut directement passer à :
    ^[ [:alnum:] ]+_{1}[ [:alnum:] ]+$/i

    sans les espaces…
    1
    1. Cela dit {1} ne sert à rien

      ^[ [:alnum:] ]+_{1}[ [:alnum:] ]+$/i 

      =
      ^[ [:alnum:] ]+_[ [:alnum:] ]+$/i
      0
    2. Contributeur
      @gigagaexact !
      plus un !
      0
    3. Contributeur
      @gigagaon est des bêtes, il nous manque qu'un testeur en fait !
      -:oD
      0
    4. @DalidaPas faux! On s'excite tout seul à la moindre l'ER a faire ;)
      0
    5. @gigagaMerci Dalila et Gigaga pour votre réponse rapide et votre REGEX fonctionnelle, elle marche niquel !
      Bonne soirée à vous et encore merci !
      0
  2. Contributeur
    salut,

    allez, je tente, j'ai jamais fait autant de Regex qu'en répondant sur CCM !
    -:oD
    '`[A-Z,0-9]+_{1}[A-Z,0-9]+`'

    LETTRES ou chiffres une fois ou plus, soulignement une fois, LETTRES ou chiffres une fois ou plus.
    0
    1. if (preg_match("/[a-z0-9]+[a-z0-9_]*[a-z0-9]+/i", $texte) && substr_count($texte, "_")<=1)
      0
      1. L'ER de Dalida est mieux que la mienne, car moi je fais 2 controles (je voyais pas comment m'assurer que _ n'est qu'une seule fois).
        Par contre, l'ER faut l'encapsuler par "//i" pour que ce soit insensible à la casse.
        0
        1. Contributeur
          re,

          L'ER de Dalida est mieux que la mienne
          mais elle contient une erreur que j'ai vu grâce à toi !
          '`[A-Z0-9]+_{1}[A-Z0-9]+`'

          à trois on va finir par y arriver, c'est sûr !
          -:oD
          0
          1. Ah oui, la virgule... J'avais meme pas vu ;)

            Je dirai donc :

            '/^[A-Z0-9]+_{1}[A-Z0-9]+$/i'


            Tu confirmes? ;)
            0
          2. Contributeur
            @gigagaoui mais sans le "i" puisqu'il ne veut que des majuscules !
            -;o)

            <edit>
            Je voudrais créer une Regex qui exclut tout les caractères spéciaux sauf le "_", qui autorise le lettres en majuscules et les chiffres.
            on finit par parler tout seuls !
            </edit>
            0
          3. @DalidaJe suis pas sûr :

            Par exemple, elle doit reconnaitre : "aZ_78abc" mais pas "_Abc1" ni "3_ab_c".

            Il a dit qu'elle doit reconnaitre les majscules mais je pense qu'il a dit ça dans le sens "en plus des minuscules".
            Sinon j'ai ajouté les caractères de début et de fin de chaine et enlevé tes `
            0
        2. Merci de vos réponses, je vais tester tout ça. Pour rappel je veux pourvoir mettre des lettres minuscules ET majuscules.
          0
          1. if (preg_match("/^[A-Z0-9]+_{1}[A-Z0-9]+$/i", $texte))


            doit donc être OK ;)
            0