OVH Cloud OVH Cloud

Verifier chiffres et lettres

7 réponses
Avatar
sylvie
bonjour a tous.

je suis debutante en php

Savez vous quelle commande utiliser pour vérifier qu'il n'y a que des
chiffres, des lettres majuscules ou minuscules et des espaces dans une
chaine ?

Merci.

7 réponses

Avatar
Olivier Miakinen

Savez vous quelle commande utiliser pour vérifier qu'il n'y a que des
chiffres, des lettres majuscules ou minuscules et des espaces dans une
chaine ?


Il y a plusieurs façons de le faire. Voici quelques exemples (à vérifier
quand même car il m'arrive de raconter des bêtises quand je ne teste pas
un code).

define("OK_CHARS",
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ");

http://www.php.net/manual/fr/function.strspn.php
(strspn($str, OK_CHARS) == strlen($str))

http://www.php.net/manual/fr/function.strcspn.php
(strcspn($str, OK_CHARS) == 0)

http://www.php.net/manual/fr/function.trim.php
(trim($str, OK_CHARS) == "")
(ltrim($str, OK_CHARS) == "")
(rtrim($str, OK_CHARS) == "")

http://www.php.net/manual/fr/function.preg-match.php
(preg_match('/^'.OK_CHARS.'*$/', $str) == 1)
(preg_match('/^[a-zA-Z ]*$/', $str) == 1)

http://www.php.net/manual/fr/function.preg-replace.php
(preg_replace('/[a-zA-Z ]/', '', $str) == '')

Avatar
P'tit Marcel
Olivier Miakinen wrote:

Savez vous quelle commande utiliser pour vérifier qu'il n'y a que des
chiffres, des lettres majuscules ou minuscules et des espaces dans une
chaine ?


Il y a plusieurs façons de le faire. Voici quelques exemples


Les exemples à coups de fonctions de chaînes sont rigolos et en plus ils
ont l'air de marcher :-)

Par contre, les exemples de regex me semblent bizarres :

(preg_match('/^'.OK_CHARS.'*$/', $str) == 1)
n'acceptera que les chaînes du genre :

"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
ou
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ "
ou
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ "
etc.

et ces syntaxes oublient les chiffres :
(preg_match('/^[a-zA-Z ]*$/', $str) == 1)
(preg_replace('/[a-zA-Z ]/', '', $str) == '')



Pourquoi ne pas faire plutôt :
(preg_match('/[^a-z0-9 ]/i', $str) === 0)


eça
--
P'tit Marcel


Avatar
Frederic Rouchouze
Savez vous quelle commande utiliser pour vérifier qu'il n'y a que des
chiffres, des lettres majuscules ou minuscules et des espaces dans une
chaine ?


J'ai appris hier en lisant ce forum que l'on pouvait utiliser les fonctions
:
ctype_digit()

ctype_alnum()

ctype_alpha()

ctype_upper()

ctype_lower()
--
Frédéric Rouchouze
mailto:

Avatar
ftc
Savez vous quelle commande utiliser pour vérifier qu'il n'y a que des
chiffres, des lettres majuscules ou minuscules et des espaces dans une
chaine ?



J'ai appris hier en lisant ce forum que l'on pouvait utiliser les fonctions
:
ctype_digit()

ctype_alnum()

ctype_alpha()

ctype_upper()

ctype_lower()


Il faut aussi vérifier que la locale est bien réglée ( setlocale() )
pour que soient pris en compte les caractères accentués.


Avatar
Olivier Miakinen

Les exemples à coups de fonctions de chaînes sont rigolos et en plus ils
ont l'air de marcher :-)

Par contre, les exemples de regex me semblent bizarres :


Je savais bien que j'allais me tromper quelque part, et pourtant j'ai
relu chaque exemple au moins trois fois (mais il était à peu près la
même heure que maintenant).

(preg_match('/^'.OK_CHARS.'*$/', $str) == 1)



Je voulais écrire :
(preg_match('/^['.OK_CHARS.']*$/', $str) == 1)

et ces syntaxes oublient les chiffres :
(preg_match('/^[a-zA-Z ]*$/', $str) == 1)
(preg_replace('/[a-zA-Z ]/', '', $str) == '')



Je n'avais pas bien lu l'énoncé. Note que j'étais cohérent avec moi-même
puisque j'avais omis les chiffres *aussi* dans la constante OK_CHARS.

Pourquoi ne pas faire plutôt :
(preg_match('/[^a-z0-9 ]/i', $str) === 0)


Ça me semble bien aussi. À rajouter à la liste, donc.
D'autres idées ?


Avatar
(¯`·..Yttrium ...·´¯)
"sylvie" a écrit dans le message de news:

bonjour a tous.

je suis debutante en php

Savez vous quelle commande utiliser pour vérifier qu'il n'y a que des
chiffres, des lettres majuscules ou minuscules et des espaces dans une
chaine ?

Merci.


Bonjour, moi j'utilise :

<?
if ( !ereg("^[a-zA-Z0-9]*$", $maVariableAChecker ) )
?>


Salutations.

Avatar
ftc
"sylvie" a écrit dans le message de news:


bonjour a tous.

je suis debutante en php

Savez vous quelle commande utiliser pour vérifier qu'il n'y a que des
chiffres, des lettres majuscules ou minuscules et des espaces dans une
chaine ?

Merci.



Bonjour, moi j'utilise :

<?
if ( !ereg("^[a-zA-Z0-9]*$", $maVariableAChecker ) )
?>




Sauf qu'il me semble que cette expression ne prend pas en compte les
caractères accentués.

setlocale (LC_ALL, 'fr_FR');
if ( preg_match("/^[[:alpha:]0-9 ]*$/", $maVariableAChecker))
me semble plus approprié.