1

私は正規表現を読んで読んでいますが、コードの何が問題になっているのか理解できません。

if(eregi("^[A-Za-z0-9_\-]$", $username)){return true;}

trueを返すことはありません。ユーザー名を検証しようとしていますが、小文字のaz、大文字のaz、数字、ハイフン、アンダースコアのみを許可しています。

4

2 に答える 2

5

eregi()非推奨です。preg_match()代わりに使用してください。

正規表現の区切り文字/、、、など)@はありません~

を使用しpreg_match('/^[\w-]+\z/')ます。

  • /私が使用した区切り文字です。PHPでは、他の多くの文字を使用できます。
  • \wへのショートカット[A-Za-z0-9_]です。ここでは、正規表現を短くし、できれば明確にするのに役立ちます。
  • 文字クラス内で、-が有効な範囲の一部でない場合、文字通りに解釈されます。このシナリオではエスケープする必要がないため、エスケープしていません。
  • +1回以上一致することを示す数量詞です。ここでそれが必要です。
  • \z文字列の終わりに一致することを意味します。を使用しました。$これにより、末尾が可能になり\nます。
于 2011-07-13T01:26:47.437 に答える
1

使用しないeregiでください-非推奨です。preg_match代わりに使用してください:

if (preg_match("/^[A-Za-z0-9_\-]+/i$", $username)){return true;}
于 2011-07-13T01:28:01.593 に答える