2
if(preg_match("%(?=.{8})[A-Za-z0-9]([.-]{0,1})%", stripslashes(trim($_POST['username']))))

ユーザー名を少なくとも 8 文字の A-Za-z0-9 にし、1 つだけにする必要があります。または 1 - . これを実装するにはどうすればよいですか?私のコードは、「..............」のユーザー名を有効として許可しています。<- それはしたくない。

ところで:「。」または「-」はオプションであることを意味します。

4

2 に答える 2

4

場合によっては、正規表現が適切なツールではないことがあります。

$username = stripslashes(trim($_POST['username']));

if(preg_match('/^[a-zA-Z0-9.-]{8,}$/', $username)
&& substr_count($username, '-') <= 1
&& substr_count($username, '.') <= 1) {
    # It's valid.
}
于 2012-07-03T23:11:45.723 に答える
2

簡単なパッチは、最初のチェックの後にそれらの文字をカウントすることです。

つまり、

 if (strlen(preg_replace("#[^.-]#", '', $username)) > 2)
     // Not valid.

これはあなたが要求したチェックではありません。これは . と - を一緒にカウントするため、2 つのドットまたは 2 つのダッシュが有効と見なされます。ただし、より多くの文字にすばやく簡単に拡張できます。

于 2012-07-03T23:14:33.133 に答える