アンダースコアと英数字としてユーザー名を検証
-
19-09-2019 - |
質問
私の登録ページで私だけでなく、オプションのアンダースコアと英数字としてユーザ名を検証する必要があります。
:私はこれを作ってみましたfunction validate_alphanumeric_underscore($str)
{
return preg_match('/^\w+$/',$str);
}
どの大丈夫動作しているようですが、私は正規表現専門家ではありませんよ!誰もがすべての問題を発見していますか?
解決
\w
の実際のマッチした文字は、ロケールに依存するそれが使用されます:
A "単語" の文字が任意の文字や数字またはアンダースコア文字、つまり、Perlの "の の単語のの" の一部とすることができる任意の文字です。文字と数字の定義は、PCREの文字テーブルにより制御され、ロケール固有のマッチングが行われている場合は異なる場合があります。たとえば、「FR」(フランス語)ロケールで、大きい128よりも、いくつかの文字コードは、W \でアクセント付き文字のために使用されており、これらが一致している。
ですから、より良い明示的に許可したいものを文字を指定する必要があります:
/^[A-Za-z0-9_]+$/
これは単に、英数字とアンダースコアを可能にします。
そして、あなたが唯一の連結文字としてアンダースコアを許可すると、ユーザー名はアルファベット文字で開始する必要があることを強制したい場合:
/^[A-Za-z][A-Za-z0-9]*(?:_[A-Za-z0-9]+)*$/
他のヒント
ここでカスタム関数はhref="http://php.net/manual/en/function.ctype-alnum.php" rel="noreferrer"> PHP ctype_alnum 許容文字の配列と一緒に
<?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;
}
}
?>
してみてください。
function validate_alphanumeric_underscore($str)
{
return preg_match('/^[a-zA-Z0-9_]+$/',$str);
}
は、私には正常に見えます。あなたはアンダースコアを配置するためには要求をしないことに注意してくださいので、「username_」と「___username」だろう両方合格ます。
私は、連結としてのみ許可アンダースコアに、オクラの二次正規表現をとりますが、_ので、ユーザは「special__username」、ちょうどマイナーな微調整のようにすることができます。
の後に+を追加します /^[A-Za-z][A-Za-z0-9]*(?:_+[A-Za-z0-9]+)*$/
独自のソリューションは完全に罰金です。
preg_match
は何が必要な文字クラス\w
が完全に一致するように定義されているPerlのような正規表現を使用します:
\w
- "単語" の文字(英数字プラス "_")を一致させる
(ソースの)