2012-03-18 5 views
3

私は[email protected]または[email protected]のような多くのスパムメールアカウントを持つ大規模なユーザーデータベースを持っており、(すべてのデータベースを解析するPHPスクリプトを実行する代わりに)1つのクエリでそれらを削除したいと考えています。REGEXP MySQL関数を使用して2ドット以上の電子メールを検索する方法は?

MySQLにはREGEXP機能がありますが、「ドット」で使用するのは難しいです。一人一人が失敗した

  • SELECT * FROM users WHERE email REGEXP '([[...]]){2,}'
  • SELECT * FROM users WHERE email REGEXP '(\\.){2,}'
  • SELECT * FROM users WHERE email REGEXP '(.*)[[...]]{2}(.*)'

:私はのようなものの多くを試してみました。

アイデア?

+1

2ドット?例えば[email protected]はどうですか? (この議論は永遠に続くかもしれない)。なぜ彼らがスパムだと気にしますか? – Ben

+0

「@」はあなたと一緒にいるかもしれません。 – MrGomez

+4

'f.o.o.b.a.r @ gmail.com'は' foobar @ gmail.com'と同じアカウントになります。 – Qtax

答えて

14

これはどうですか?

SELECT * FROM users WHERE email REGEXP '[.].*[.].*@'; 

これは(まだ.co.ukなどのようなマルチドットのドメイン名を可能にする)、@の前に2つ(またはそれ以上)のドットを検索します。

ただし、実際にはユーザー名に複数のドットが含まれている可能性も考慮する必要がありますが、これは依然として正当なものです。

+0

ありがとう、私は大規模な 'から削除 'を実行しません。 – j0k

1

私が見た限り、これは通常、gmail.comアカウントを使用した場合のスパムの問題です。複数のドットを持つ正当なユーザー名は、[email protected]のようになります。つまり、ユーザー名に3つ以上のドットを使用するスパマーです。私は自分のデータベースから切り捨てて、登録プロセスのコードを実装します。 Gmailのアドレスが使用されているときにユーザ名に2ドット以上の使用を許可しないようにします。

SELECT user_email FROM users WHERE email REGEXP '[.].*[.].*[.].*@'; 
+1

なぜですか?しないでください。 Gmailアドレスのドット数は何も意味しません。サイトでGmailのアドレスに「+」記号を付けることができないときは嫌いです。代わりに私のアドレスに余分なドットを追加できないような恣意的なルールがあれば、さらに嫌いです。 – Omn

関連する問題