OVH Cloud OVH Cloud

simplifier une validation de digit ?

12 réponses
Avatar
Gill
De combien de caractères pourriez-vous réduire mon horreur ici-présente ?
- $page est un string/numéro de 2 chiffres (pas de virgule ni de signe)
- $page <= $dernierepage
- si $page non valide, $page="00"

if($page==NULL)
$page="00";
if(strlen($page) < 3){
if(strlen($page) == 1 && strstr("0123456789",$page))
$page = "0".$page;
if(!(strstr("0123456789",$page{0}) && strstr("0123456789",$page{1})))
$page = "00";
} else $page = "00";
if((int)$page > (int)$dernierePage)
$page="00";

2 réponses

1 2
Avatar
bruno modulix
Gill wrote:
if ( preg_match( '/([0-9]){1,2}/', $page ) &&
(snip)



Autre post :


function formatPage($page,$dernierepage) {
if (isset($page) && ereg("[0-9]{1,2}",$page)) {



(snip)

Quant à ereg et preg_match, je vais sérieusement me pencher dessus.


Les expressions rationnelles sont un excellent outil (je ne comprends
même pas comment j'ai pu m'en passer si longtemps), mais assez gourmand
en ressources machines et ne favorisant pas toujours la lisibilité -
bref, à n'utiliser qu'avec un corse et un arménien.

Ici, leur emploi est discutable, l'expression "[0-9]{1,2}" étant
remplaçable par strlen() et ctype_digit(). A vrai dire, même strlen()
s'avère inutile, une comparaison sur la borne supérieure 99 permettant
d'arriver au même résultat à moindre coût.

Mes deux centimes...
--
bruno desthuilliers
ruby -e "print ''.split('@').collect{|p|
p.split('.').collect{|w| w.reverse}.join('.')}.join('@')"


Avatar
bruno modulix
bruno modulix wrote:
(snip)
if (ctype_digit($page)) {
$page = (int)$page;
if ($page > 99 || $page > (int)$dernierePage) {
$page = 0;
}
}
else {
$page = 0;
}
$page = sprintf("%02d", $page);



C'est vrai que la comparaison marche a priori aussi bien en chaine qu'en
numérique, donc le code suivant devrait suffire :

if (! (strlen($page) == 2
&& ctype_digit($page)
&& $page <= $dernierePage)
) {
$page = "00";
}

J'ai remis le test sur la longueur de la chaine, d'une part parce que ça
faisait partie des specs, d'autre part parce qu'il est probable que ça
s'avère moins coûteux à l'usage.

--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in ''.split('@')])"

1 2