1

PHP で正規表現を実行しようとしていますが、バグが発生し続けています。A ~ Z、0 ~ 9、アンダースコア (_) にしたいのですが、テキストの端にアンダースコアを使用することはできません。内側のみ。

これが私が持っているものです:

if (!ereg("^[a-zA-Z0-9_]{3,16}$",$username)) {
// Does not match
}else{
// Good job, within rules!
}
4

2 に答える 2

5

これが最善の方法かどうかはわかりませんが、うまくいくはずです:

^[a-zA-Z0-9][a-zA-Z0-9_]{1,14}[a-zA-Z0-9]$

2文字列の先頭/末尾に 2 文字あるため、境界を減らしました。

于 2012-05-19T05:01:46.273 に答える
0

まず、ereg非推奨です。preg_match代わりに使用してください。

第 2 に、アンダースコアで開始または終了しない限り、3 文字以上 16 文字以下の文字、数字、およびアンダースコアの文字列と一致させたいと考えています。@Blenderのソリューションが機能します。しかし、いったん を使用するpreg_matchと、つまり PCRE を使用すると、もう少しコンパクトに実行できる機能にアクセスできます。先頭または末尾のアンダースコアを処理するルックアラウンド アサーションと\w、すでに文字、数字、およびアンダースコア:

if (!preg_match('/^(?!_)\w{3,16}(?<!_)$/', $username)) {
    // Does not match
} else {
    // Good job, within rules!
}
于 2012-05-19T05:26:19.863 に答える