Bonjour,
Je ne trouve pas comment faire tourner cette simple condition :
Si $id n'a pas une longueur strictement = à 18 OU si le premier caractère n'est pas un 'P' ou un 'V' alors...
J'ai écris ça :
if ((strlen($id) <> 18) || (substr($id, 0,1) !== "S" or "T")) {
echo $a . 'erreur !'; } else{}
Ce qui ne fonctionne pas c'est la deuxième condition avec S et T.
Merci !
Bonjour,
Essaye ça:
if ((strlen($id) <> 18) || (!in_array(substr($id, 0,1) , array("S","T"))) {
J'ai peut-être mal compris ta demande mais normalement :
if(strlen($id) != 18 || !in_array(substr($id, 0, 1), array("S", "T")))
{
//ton code en cas d'erreur
}
else
{
//ton code si c'est correct
}
Pourquoi se compliquer la vie ?
if(strlen($id) == 18 || in_array(substr($id, 0, 1), array("S", "T"))) {
//ton code si c'est correct
}
else {
//ton code en cas d'erreur
}
Oui, oui, en majuscule. Ce que tu m'as donné fait l'inverse de ce que je souhaite. C.a.d que si la première lettre de la chaine $id commence par S ou T, cela renvoi erreur ! Hors, ce sont les deux seules lettres autorisées.
Normalement oui, la condition que tu as écrite (sans le !) est l'inverse de ce que tu veux faire
En effet, ça fonctionne. Ce n'était qu'à cause de ! que je n'avais pas vu et de ma méconnaissance de la fonction in_array. D'ailleurs, très utile. MErci à vous.
On pourrait encore simplifier en utilisant la nouvelle façon pour déclarer un array :
['S', 'T']
Je trouve sa plus agréable, personnellement (surtout que array()
est trompeur, parce que ce n'est pas une fonction).
@forever : Certe est elle plus "agréable", il faut quand même s'en méfier car suivant les serveur, elle n'est pas encore prise en compte partout.
Oui, en effet ça fonctionne. Petit complèment d'info svp, comment faire pour spécifier p et P sans taper...p et P (maj. min.) Mieux, comment faire si je veux spécifier des lettres allant de a à z par exemple, comme avec les regex [a-bA-B] ?
in_array(strtoupper(substr($id, 0, 1)), array("S", "T"))
Utilise mb_strtoupper()
si tu utilises des charactères spéciaux. Tu pourrais aussi utiliser strtolower()
;preg_match
.(faudrait que tu cherches un peu aussi...)