ctype_alnum

(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)

ctype_alnumChequear posibles caracteres alfanuméricos

Descripción

ctype_alnum(mixed $text): bool

Chequea si todos los caracteres en la string entregada, texto, son alfanuméricos.

Parámetros

text

La cadena de prueba.

Nota:

Si se proporciona un entero en el rango -128 y 255 inclusive, será interpretado como el valor ASCII de un solo carácter (los valores negativos se verán añadir 256 para permitir caracteres en el rango ASCII extendido). Cualquier otro entero será interpretado como una cadena de caracteres que contiene los dígitos decimales del entero.

Advertencia

Desde PHP 8.1.0, pasar un argumento diferente de una cadena está obsoleto. En el futuro, el argumento será interpretado como una cadena de caracteres en lugar de un punto de código ASCII. Según el comportamiento deseado, el argumento debe ser convertido a string o debe realizarse una llamada explícita a chr().

Valores devueltos

Devuelve true si cada caracter de texto es o bien uno letra o un dígito, false de lo contrario. Cuando se llama con una cadena vacía, el resultado será siempre false.

Ejemplos

Ejemplo #1 Un ejemplo de ctype_alnum() (usando la localización predeterminada)

<?php
$cadenas
= array('AbCd1zyZ9', 'foo!#$bar');
foreach (
$cadenas as $caso_prueba) {
if (
ctype_alnum($caso_prueba)) {
echo
"La cadena $caso_prueba consiste completamente de letras o dígitos.\n";
} else {
echo
"La cadena $caso_prueba no consiste completamente de letras o dígitos.\n";
}
}
?>

El ejemplo anterior mostrará:

La cadena AbCd1zyZ9 consiste completamente de letras o dígitos.
La cadena foo!#$bar no consiste completamente de letras o dígitos.

Ver también

add a note

User Contributed Notes 4 notes

up
97
thinice at gmail dot com
16 years ago
ctype_alnum() is a godsend for quick and easy username/data filtering when used in conjunction with str_replace().

Let's say your usernames have dash(-) and underscore(_) allowable and alphanumeric digits as well.

Instead of a regex you can trade a bit of performance for simplicity:

<?php
$sUser = 'my_username01';
$aValid = array('-', '_');

if(!ctype_alnum(str_replace($aValid, '', $sUser))) {
    echo 'Your username is not properly formatted.';
}
?>
up
11
marcelocamargo at linuxmail dot org
10 years ago
It is also important to note that the behavior of `ctype_alnum` differs according to the operating system. For UNIX-based operating system, if you pass a value that is not a string (or an overloaded object), independently of the value, it will always result in false. However, if we do the same on Windows, using, for example, -1 as literal (a minus and a number greater than 0), we'll have true as result.

<?php var_dump(ctype_alnum(-1));
// UNIX: bool(false)
// Windows: bool(true)
up
23
Anonymous
13 years ago
Quicktip: If ctype is not enabled by default on your server, replace ctype_alnum($var) with preg_match('/^[a-zA-Z0-9]+$/', $var).
up
0
luismartin at casfid dot com
15 days ago
Be aware that this function will not validate non-english alphanumeric characters. Only ASCII.

<?php
$test = "aeiou";
echo ctype_alnum($test) ? "ok\n" : "err\n";
$test = "áeiou";
echo ctype_alnum($test) ? "ok\n" : "err\n";
$test = "aeiöu";
echo ctype_alnum($test) ? "ok\n" : "err\n";
$test = "ñ";
echo ctype_alnum($test) ? "ok\n" : "err\n";

// output:
// ok
// err
// err
// err
?>

In case you want to validate these types of characters, the best choice is the use of regex, but there's a shortcut so that you will not have to bother typing all of them:

This regex: /^[\p{L}\p{M}\p{Nd}]+$/u
\p{L}  = Any letter, syllable, or ideogram from any Unicode script.
\p{M}  = Any combining mark (necessary for vowels/accents in languages like Arabic or Hindi).
\p{Nd} = Any decimal digit (0-9) from any script, excluding fractions like ½ or Roman numerals.
u = The modifier at the end says: treat the string as a UTF-8 representation.

<?php
$test = "aeiouáöñçسअ爱";
echo preg_match('/^[\p{L}\p{M}\p{Nd}]+$/u', $test) ? "ok\n" : "err\n";
$test = "aeiouáöñçسअ爱!+½";
echo preg_match('/^[\p{L}\p{M}\p{Nd}]+$/u', $test) ? "ok\n" : "err\n";

// output:
// ok
// err
?>
To Top