web-dev-qa-db-fra.com

PHP - regex n'autorisant que les lettres et les chiffres

J'ai essayé:

preg_match("/^[a-zA-Z0-9]", $value)

mais je suppose que je fais quelque chose de mal.

44
Jason94

1. Utilisez PHP intégré ctype_alnum

Vous n'avez pas besoin d'utiliser un regex pour cela, PHP a une fonction intégrée ctype_alnum qui fera cela pour vous et exécutera plus rapidement:

<?php
$strings = array('AbCd1zyZ9', 'foo!#$bar');
foreach ($strings as $testcase) {
    if (ctype_alnum($testcase)) {
        echo "The string $testcase consists of all letters or digits.\n";
    } else {
        echo "The string $testcase does not consist of all letters or digits.\n";
    }
}
?>

2. Sinon, utilisez une expression régulière

Si vous voulez désespérément utiliser une expression régulière, vous avez quelques options.

D'abord:

preg_match('/^[\w]+$/', $string);

\w comprend plus qu’un caractère alphanumérique (il comprend un soulignement), mais inclut tous les caractères \d.

Alternativement:

/^[a-zA-Z\d]+$/

Ou même simplement:

/^[^\W_]+$/
95
SW4

Vous avez laissé le / (délimiteur de motif) et $ _ (correspond à la chaîne de fin).

preg_match("/^[a-zA-Z0-9]+$/", $value)
20
Kendall Hopkins
  • Ancre d'extrémité manquante $
  • Multiplicateur manquant
  • Délimiteur de fin manquant

Cela devrait donc échouer quand même, mais si cela peut fonctionner, cela correspond à un chiffre au début de la chaîne.

/^[a-z0-9]+$/i
13
KingCrunch

Comme l'OP a dit qu'il veut des lettres et des chiffres UNIQUEMENT (pas de trait de soulignement!), Une autre façon de l'inclure dans php regex consiste à utiliser des expressions posix:

/^[[:alnum:]]+$/

Note: Cela ne fonctionnera pas en Java, JavaScript, Python, Ruby, .NET

2
Andrew