Problème regex

Suivre ce topic
Ce topic est suivi par : Personne...
Sowly

Sowly Le 10 décembre 2017 à 04:56 (Édité le 25 janvier 2019 à 17:54)

Bonjour je fais un topic sur ce forum car j'ai un petit problème,
je voudrais faire en sorte que tous les caractères spéciaux ne soient pas acceptés sauf certains, mon code fonctionne parfaitement il n'autorise que les :
a-z A-Z 0-9 : . _ - sauf un problème survient lorsqu'on insère un & il est lui aussi autorisé et je ne sais pas comment empêcher ceci, je vous mets mon bout de code si dessous :
<?php

$pseudonyme = $_GET['pseudonyme'];
if (!(preg_match("/[^A-Za-z0-9:._-]/", $pseudonyme)))
{
   echo 'ok';
}
else
{
   echo 'pas ok';
}

?>
Merci d'avance à ceux qui pourront m'aider

EDIT : Je pense avoir trouver le problème vu que c'est une requête GET mon code reconnait le & comme si je voulais lui donner un lien sous cette forme lien.com/api.php?pseudonyme=Sowly&mdp= donc je pense que pour voir mon système de preg_match je devrais le faire directement sur le site et non dans l'api avec une requête POST
Balatharas

Balatharas Le 14 décembre 2017 à 14:43 (Édité le 14 décembre 2017 à 14:44)

Si tu veux interdire les & en plus des : . _ - <nombres>
Cette regex marche:
<?php
$pseudonyme = "Hello";

if(!preg_match('#(&)#', $pseudonyme, $matches1)) { // Cherche &
    if(!preg_match('#(\d+)#', $pseudonyme, $matches2)) { // Cherche un chiffre/nombre
        if(!preg_match('#(-)#', $pseudonyme, $matches3)) { // Cherche un tiret -
            if(!preg_match('#(_)#', $pseudonyme, $matches4)) { // Cherche underscore _
                if(!preg_match('#(:)#', $pseudonyme, $matches5)) { // Cherche :
                    if(!preg_match('#(\.)#', $pseudonyme, $matches6)) { // Cherche un point .
                        var_dump('Ya pas & ou un nombre ou - ou _ ou : ou .');
                    }
                }
            }
        }
    }
}
var_dump($matches1);
var_dump($matches2);
var_dump($matches3);
var_dump($matches4);
var_dump($matches5);
var_dump($matches6);
?>
Plus simplement, si toutes les variables $matches[1-6] affichent empty, alors on affiche var_dump('Ya pas.....');
Syntaxe preg_match(pattern, subject, matches)
matches affiche les trouvailles de pattern dans subject
Profil introuvable

Profil introuvable Le 12 janvier 2018 à 23:23

haha :D @Balatharas 
Profil introuvable

Profil introuvable Le 12 janvier 2018 à 23:25

'/^[a-zA-Z0-9:-_\.]+$/'  voila la regex
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte