Validate-Benutzername als alphanumerische mit Unterstrichen
-
19-09-2019 - |
Frage
Auf meiner Registrierungsseite muss ich die Benutzernamen als alphanumerische bestätigen nur, aber auch mit optional Unterstrichen. Ich habe kommen mit diesem:
function validate_alphanumeric_underscore($str)
{
return preg_match('/^\w+$/',$str);
}
Welche Ordnung scheint zu funktionieren, aber ich bin kein Experte regex! Hat jemand ein Problem erkennen?
Lösung
Die tatsächliche angepasst Zeichen von \w
hängen von der locale die verwendet wird:
Ein „Wort“ -Zeichen ist ein beliebiger Buchstabe oder Ziffer oder der Unterstrich, dass jeder Charakter ist, den Teil eines Perl sein kann „ Wort “. Die Definition von Buchstaben und Ziffern wird durch PCRE der Zeichentabellen gesteuert und kann variieren, wenn länderspezifische Anpassungsstattfindet. Zum Beispiel in der „fr“ (Französisch) locale, einige Zeichencodes größer als 128 sind für Umlaute verwendet, und diese werden angepasst durch \ w.
So sollten Sie besser explizit angeben, welche Zeichen Sie zulassen möchten:
/^[A-Za-z0-9_]+$/
Auf diese Weise kann nur alphanumerische Zeichen und den Unterstrich.
Und wenn Sie Strich nur als Verknüpfungszeichen zulassen wollen und wollen erzwingen, dass der Benutzername mit einem Zeichen aus dem Alphabet beginnen müssen:
/^[A-Za-z][A-Za-z0-9]*(?:_[A-Za-z0-9]+)*$/
Andere Tipps
Hier ist eine benutzerdefinierte Funktion der Zeichenfolge zu validieren, indem die PHP ctype_alnum in Verbindung mit einer Reihe von Zeichen erlaubt:
<?php
$str = "";
function validate_username($str) {
// each array entry is an special char allowed
// besides the ones from ctype_alnum
$allowed = array(".", "-", "_");
if ( ctype_alnum( str_replace($allowed, '', $str ) ) ) {
return $str;
} else {
$str = "Invalid Username";
return $str;
}
}
?>
Versuch
function validate_alphanumeric_underscore($str)
{
return preg_match('/^[a-zA-Z0-9_]+$/',$str);
}
Sieht für mich in Ordnung. Beachten Sie, dass Sie keine Anforderung für die Platzierung des Unterstrichs machen, so „username_“ und „___username“ würden beide weiter.
Ich würde Gumbo des sekundären regex nehmen, nur um Unterstrich als Verkettung zu erlauben, aber ein + nach dem hinzufügen _ so ein Benutzer wie „special__username“ sein kann, nur eine kleine zwicken.
/^[A-Za-z][A-Za-z0-9]*(?:_+[A-Za-z0-9]+)*$/
Ihre eigene Lösung ist völlig in Ordnung.
preg_match
verwendet Perl-wie reguläre Ausdrücke, in denen die Zeichenklasse \w
definiert genau entsprechen, was Sie brauchen:
\w
- Spiel ein "Wort" Zeichen (alphanumerische plus "_")
( Quelle )