web-dev-qa-db-fra.com

comment obtenir la longueur des nombres entiers dans PHP ?

Je souhaite obtenir la longueur des valeurs entières à valider en PHP . Exemple: Les numéros mobiles ne doivent comporter que 10 valeurs entières. Il ne devrait pas y avoir plus de 10 ou moins de 10 et il ne devrait pas non plus inclure de caractères alphabétiques.

Comment puis-je valider cela?

25
GitsD
if (preg_match('/^\d{10}$/', $string)) {
  // pass
} else {
  // fail
}
29
Alex Howansky
$num_length = strlen((string)$num);
if($num_length == 10) {
    // Pass
} else {
    // Fail
}
113
mdm

Cela fonctionnera dans presque tous les cas (sauf zéro) et sera facilement codé dans d'autres langues:

$length = ceil(log10(abs($number) + 1)
10

À mon avis, le meilleur moyen est:

$length = ceil(log10($number))

Un logarithme décimal arrondi est égal à la longueur d'un nombre.

7
Mikołaj

Si vous utilisez un formulaire Web, assurez-vous de limiter la saisie de texte à 10 caractères et d'ajouter ainsi une certaine accessibilité (les utilisateurs ne souhaitent pas le saisir incorrectement, le soumettre, obtenir un dialogue sur leur erreur, le corriger, le soumettre encore, etc.)

4
Matt Bell

Utilisez la fonction intval en boucle, Voir cet exemple

<?php
  $value = 16432;
  $length=0;
  while($value!=0) {
   $value = intval($value/10);
   $length++
  }
  echo "Length of Integer:- ".$length;
 ?>
1
Ibrahim Dal

D'après votre question, "Vous voulez obtenir la longueur d'un entier, l'entrée n'acceptera pas les données alphanumériques et la longueur de cet entier ne peut pas dépasser 10. Si c'est ce que vous voulez dire pour y parvenir: "

<?php

$int = 1234567890; //The integer variable

    //Check if the variable $int is an integer:
if (!filter_var($int, FILTER_VALIDATE_INT)) { 
    echo "Only integer values are required!";
    exit();
} else {
    // Convert the integer to array
    $int_array  = array_map('intval', str_split($int));
    //get the lenght of the array
    $int_lenght = count($int_array);
}
    //Check to make sure the lenght of the int does not exceed or less than10
    if ($int_lenght != 10) {
    echo "Only 10 digit numbers are allow!";
    exit();
} else {
     echo $int. " is an integer and its lenght is exactly " . $int_lenght;
    //Then proceed with your code
}

    //This will result to: 1234556789 is an integer and its lenght is exactly 10

?>
0
Emeka Augustine

Si vous évaluez des numéros de téléphone mobile (numéros de téléphone), je vous recommande de ne pas utiliser int comme type de données choisi. Utilisez plutôt une chaîne car je ne peux pas savoir comment ni pourquoi vous voudriez faire des calculs avec ces nombres. En tant que meilleure pratique, utilisez int, floats, etc. lorsque vous souhaitez/devez effectuer des calculs. Utilisez des chaînes lorsque vous ne le faites pas. 

0
user3738926
$input = "03432 123-456"; // A mobile number (this would fail)

$number = preg_replace("/^\d/", "", $number);
$length = strlen((string) $number);

if ($number == $input && $length == 10) {
    // Pass
} else {
    // Fail
}
0
Matt Kirman