update page now

ctype_alnum

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

ctype_alnumCheck for alphanumeric character(s)

Опис

ctype_alnum(mixed $text): bool

Checks if all of the characters in the provided string, text, are alphanumeric.

Параметри

text

The tested string.

Зауваження:

Ціле число (int) від -128 до 255 включно вважається кодом символу ASCII (від'ємні значення збільшуються на 256, що дає доступ до розширеного діапазону ASCII). Інші цілі числа вважаються рядками, що містять ціле десяткове число у вигляді цифр.

Увага

Починаючи з PHP 8.1.0, параметр, що не є рядком — застарів. У майбутньому параметр вважатиметься виключно рядком, а не кодом символу з ASCII. Залежно від наміченої поведінки, параметр буде або приведено до string, або явно опрацьовано функцією chr().

Значення, що повертаються

Returns true if every character in text is either a letter or a digit, false otherwise. Якщо викликано з порожнім рядком — результатом буде false.

Приклади

Приклад #1 A ctype_alnum() example (using the default locale)

<?php
$strings
= array('AbCd1zyZ9', 'foo!#$bar');
foreach (
$strings as $testcase) {
if (
ctype_alnum($testcase)) {
echo
"The string $testcase consists of all letters or digits.\n";
} else {
echo
"The string $testcase does not consist of all letters or digits.\n";
}
}
?>

Поданий вище приклад виведе:

The string AbCd1zyZ9 consists of all letters or digits.
The string foo!#$bar does not consist of all letters or digits.

Прогляньте також

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
1 day 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