ctype_alnum() is a godsend for quick and easy username/data filtering when used in conjunction with str_replace().
Let's say your usernames have dash(-) and underscore(_) allowable and alphanumeric digits as well.
Instead of a regex you can trade a bit of performance for simplicity:
<?php
$sUser = 'my_username01';
$aValid = array('-', '_');
if(!ctype_alnum(str_replace($aValid, '', $sUser))) {
echo 'Your username is not properly formatted.';
}
?>
ctype_alnum
(PHP 4 >= 4.0.4, PHP 5)
ctype_alnum — Vérifie qu'une chaîne est alphanumérique
Description
$text
)
ctype_alnum() vérifie si tous les caractères de la chaîne
text sont des lettres et des chiffres.
Liste de paramètres
-
text -
La chaîne testée.
Valeurs de retour
Retourne TRUE si tous les caractères de text
sont soit des lettres, soit des chiffres, FALSE sinon.
Exemples
Exemple #1 Exemple avec ctype_alnum() (en utilisant les locales par défaut)
<?php
$strings = array('AbCd1zyZ9', 'foo!#$bar');
foreach ($strings as $testcase) {
if (ctype_alnum($testcase)) {
echo "La chaîne $testcase contient des chiffres ou des lettres.\n";
} else {
echo "La chaîne $testcase ne contient pas que des chiffres ou des lettres.\n";
}
}
?>
L'exemple ci-dessus va afficher :
La chaîne AbCd1zyZ9 contient des chiffres ou des lettres. La chaîne foo!#$bar ne contient pas que des chiffres ou des lettres.
Notes
Note:
Si un entier dans l'intervalle -128 et 255 inclus est fourni, il sera interprété comme la valeur ASCII d'un seul caractère (les valeurs négatives se verront ajouter 256 afin d'autoriser les caractères dans l'intervalle ASCII étendue). Tout autre entier sera interprété comme une chaîne de caractères contenant les décimales de l'entier.
Voir aussi
- ctype_alpha() - Vérifie qu'une chaîne est alphabétique
- ctype_digit() - Vérifie qu'une chaîne est un entier
- setlocale() - Modifie les informations de localisation
Quicktip: If ctype is not enabled by default on your server, replace ctype_alnum($var) with preg_match('/^[a-zA-Z0-9]+$/', $var).
