Remove all non-printable characters from a string:
<?php
$str = implode('', array_filter(str_split($str, 1), 'ctype_print'));
?>
ctype_digit
(PHP 4 >= 4.0.4, PHP 5)
ctype_digit — Vérifie qu'une chaîne est un entier
Description
bool ctype_digit
( string $text
)
ctype_digit() vérifie si tous les caractères de la chaîne text sont 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 des entiers, FALSE sinon.
Historique
| Version | Description |
|---|---|
| 5.1.0 | Avant PHP 5.1.0, cette fonction retournait TRUE lorsque le paramètre text était une chaîne vide. |
Exemples
Exemple #1 Exemple avec ctype_digit()
<?php
$strings = array('1820.20', '10002', 'wsl!12');
foreach ($strings as $testcase) {
if (ctype_digit($testcase)) {
echo "La chaîne $testcase ne contient que des entiers.\n";
} else {
echo "La chaîne $testcase ne contient pas que des entiers.\n";
}
}
?>
L'exemple ci-dessus va afficher :
La chaîne 1820.20 ne contient pas que des entiers. La chaîne 10002 ne contient que des entiers. La chaîne wsl!12 ne contient pas que des entiers.
Exemple #2 Exemple avec ctype_digit() pour comparer des chaînes et des nombres
<?php
$numeric_string = '42';
$integer = 42;
ctype_digit($numeric_string); // true
ctype_digit($integer); // false
is_numeric($numeric_string); // true
is_numeric($integer); // true
?>
Notes
Note: Cette fonction nécessite une chaîne afin d'être pertinante ; par exemple, le fait de passer un entier retournera toujours FALSE. Voir aussi la section sur les types de ce manuel.
Voir aussi
- ctype_alnum() - Vérifie qu'une chaîne est alphanumérique
- ctype_xdigit() - Vérifie qu'un caractère représente un nombre hexadécimal
- is_numeric() - Détermine si une variable est un type numérique
- is_int() - Détermine si une variable est de type nombre entier
- is_string() - Détermine si une variable est de type chaîne de caractères
ctype_digit
Chris
02-Aug-2009 07:17
02-Aug-2009 07:17
raul dot 3k at gmail dot com
09-Apr-2009 03:21
09-Apr-2009 03:21
The ctype_digit can be used in a simple form to validate a field:
<?php
$field = $_POST["field"];
if(!ctype_digit($field)){
echo "It's not a digit";
}
?>
Note:
Digits is 0-9
Anonymous
19-Nov-2008 09:56
19-Nov-2008 09:56
Indeed, ctype_digit only functions correctly on strings. Cast your vars to string before you test them. Also, be wary and only use ctype_digit if you're sure your var contains either a string or int, as boolean true for ex will convert to int 1.
To be truly safe, you need to check the type of the var first. Here's a wrapper function that improves upon ctype_digit's broken implementation:
<?php
// replacement for ctype_digit, to properly
// handle (via return value false) nulls,
// booleans, objects, resources, etc.
function ctype_digit2 ($str) {
return (is_string($str) || is_int($str) || is_float($str)) &&
ctype_digit((string)$str);
}
?>
If, like me, you're not willing to take a chance on ctype_digit having other problems, use this version:
<?php
// replacement for ctype_digit, to properly
// handle (via return value false) nulls,
// booleans, objects, resources, etc.
function ctype_digit2 ($str) {
return (is_string($str) || is_int($str) || is_float($str)) &&
preg_match('/^\d+\z/', $str);
}
?>
minterior at gmail dot com
10-Sep-2007 02:43
10-Sep-2007 02:43
I use ctype_digit() function as a part of this IMEI validation function.
<?php
/**
* Check the IMEI of a mobile phone
* @param $imei IMEI to validate
*/
function is_IMEI_valid($imei){
if(!ctype_digit($imei)) return false;
$len = strlen($imei);
if($len != 15) return false;
for($ii=1, $sum=0 ; $ii < $len ; $ii++){
if($ii % 2 == 0) $prod = 2;
else $prod = 1;
$num = $prod * $imei[$ii-1];
if($num > 9){
$numstr = strval($num);
$sum += $numstr[0] + $numstr[1];
}else $sum += $num;
}
$sumlast = intval(10*(($sum/10)-floor($sum/10))); //The last digit of $sum
$dif = (10-$sumlast);
$diflast = intval(10*(($dif/10)-floor($dif/10))); //The last digit of $dif
$CD = intval($imei[$len-1]); //check digit
if($diflast == $CD) return true;
return false;
}
?>
