(PHP 4 >= 4.0.4, PHP 5)
ctype_alnum — Auf alphanumerische Zeichen überprüfen
Gibt TRUE zurück, wenn alle Zeichen in text entweder ein Buchstabe oder eine Ziffer sind. Anderenfalls wird FALSE zurückgegeben. In der Standardeinstellung für locale C gelten nur [A-Za-z] als Buchstaben.
Der zu prüfende String.
Liefert TRUE wenn jedes Zeichen in text ein Buchstabe oder eine Ziffer ist, sonst FALSE.
Beispiel #1 ctype_alnum() Beispiel (standard-locale vorausgesetzt)
<?php
$strings = array('AbCd1zyZ9', 'foo!#$bar');
foreach ($strings as $testcase) {
if (ctype_alnum($testcase)) {
echo "Der String $testcase enthält nur Buchstaben und Ziffern.\n";
} else {
echo "Der String $testcase bestehtn nicht nur aus Buchstaben und Ziffern.\n";
}
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Der String AbCd1zyZ9 enthält nur Buchstaben und Ziffern. Der String foo!#$bar bestehtn nicht nur aus Buchstaben und Ziffern.
Just for the record, Gentoo doesn't include this function by default. You'll have to recompile PHP with the "ctype" USE flag.
There doesn't actually seem to be a performance loss compared to using regexes. For example:
<?php
$sUser = 'my_username01';
$time_start1 = microtime(true);
$aValid = array('-', '_');
$ret1 = ctype_alnum(str_replace($aValid, '', $sUser));
$time_end1 = microtime(true);
$time1 = $time_end1 - $time_start1;
printf("Checked it with ctype_alnum and got %d in %.10f seconds\n", print_r($ret1, true), $time1);
$time_start2 = microtime(true);
$ret2 = preg_match('/^[\w-]+$/', $sUser);
$time_end2 = microtime(true);
$time2 = $time_end2 - $time_start2;
printf("Checked it with preg_match and got %d in %.10f seconds\n", print_r($ret2, true), $time2);
?>
This returns:
% time php ctype_alnum.php
Checked it with ctype_alnum and got 1 in 0.0000379086 seconds
Checked it with preg_match and got 1 in 0.0001120567 seconds
php ctype_alnum.php 0,01s user 0,01s system 84% cpu 0,024 total
% time php ctype_alnum.php
Checked it with ctype_alnum and got 1 in 0.0000400543 seconds
Checked it with preg_match and got 1 in 0.0001108646 seconds
php ctype_alnum.php 0,00s user 0,02s system 98% cpu 0,024 total
% time php ctype_alnum.php
Checked it with ctype_alnum and got 1 in 0.0000391006 seconds
Checked it with preg_match and got 1 in 0.0001142025 seconds
php ctype_alnum.php 0,02s user 0,01s system 98% cpu 0,024 total
ctype_alnum() seems to be consistently faster. I'm guessing that the preg engine initialization induces a bit of overhead.
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.';
}
?>