PHP Doku:: Auf alphanumerische Zeichen überprüfen - function.ctype-alnum.html

Verlauf / Chronik / History: (1) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzVariablen- und typbezogene ErweiterungenZeichentypprüfungCtype Funktionenctype_alnum

Ein Service von Reinhard Neidl - Webprogrammierung.

Ctype Funktionen

<<Ctype Funktionen

ctype_alpha>>

ctype_alnum

(PHP 4 >= 4.0.4, PHP 5)

ctype_alnumAuf alphanumerische Zeichen überprüfen

Beschreibung

bool ctype_alnum ( string $text )

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.

Parameter-Liste

text

Der zu prüfende String.

Rückgabewerte

Liefert TRUE wenn jedes Zeichen in text ein Buchstabe oder eine Ziffer ist, sonst FALSE.

Beispiele

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.

Siehe auch


3 BenutzerBeiträge:
- Beiträge aktualisieren...
Rory
7.12.2009 13:42
Just for the record, Gentoo doesn't include this function by default. You'll have to recompile PHP with the "ctype" USE flag.
Josip Rodin
12.08.2009 18:13
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.
thinice at gmail dot com
22.07.2009 23:46
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.';
}
?>



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)