J'ai besoin de l'expression régulière pour vérifier si une chaîne de caractères ne contient que des chiffres, des lettres, des traits d'union ou des traits de soulignement
$string1 = "This is a string*";
$string2 = "this_is-a-string";
if(preg_match('******', $string1){
echo "String 1 not acceptable acceptable";
// String2 acceptable
}
Code:
if(preg_match('/[^a-z_\-0-9]/i', $string))
{
echo "not valid string";
}
Explication:
Le modificateur "i" à la fin de la regex est pour "insensible à la casse" si vous ne mettez pas cela, vous devrez ajouter les majuscules au code avant de faire A à Z
if(!preg_match('/^[\w-]+$/', $string1)) {
echo "String 1 not acceptable acceptable";
// String2 acceptable
}
Voici un équivalent de la réponse acceptée pour le monde UTF-8.
if (!preg_match('/^[\p{L}\p{N}_-]+$/u', $string)){
//Disallowed Character In $string
}
Explication:
Notez que si le trait d'union est le dernier caractère de la définition de classe, il _ {il n'est pas nécessaire qu'il soit échappé} _. Si le tiret apparaît ailleurs dans la définition de la classe, il doit être échappé, car il sera considéré comme un caractère de plage plutôt qu'un trait d'union.
Voici une méthode funky non regex utilisant str_Word_count () :
if($string===str_Word_count($string,1,'-_0...9')[0]){
// ^^^^^^^--- characters to allow, see documentation
echo "pass";
}else{
echo "fail";
}
Voir le Lien de démonstration où je montre comment différentes entrées produisent différents tableaux de sortie.