-1

ユーザーが連絡先番号/電子メールを他のユーザーにメールで送信するのを停止する必要があるWebサイトがあります。

私はこれを以下で使用していますが、私がやりたいことをしていません..すべてのシナリオに一致しています

public function clean_email($text){
    $pattern = '/\w+[\w-\.]*(\@\w+((-\w+)|(\w*))\.[a-z]{2,3})/i';
    preg_match($pattern, $text, $matches);
    return (isset($matches[1])) ? str_replace($matches[1], 
            "[********]", $text) : $text;
}

public function clean_phone($text){
    $pattern = '/(\d{3}|\d{4})|(\d{3,+})/i';
    preg_match($pattern, $text, $matches);
    return (isset($matches[1])) ? str_replace($matches[1], 
               "[********]", $text) : $text;
}

メール本文中の電話番号を識別するために preg_replace を使用しようと考えていますが、電話番号は以下のようにさまざまな方法で記述できることを認識しています。

0433 765 888
0433765888
+61433765888
+610433765888
+61 02 9876 0987
+61 0298760987
+610298760987

それらすべてを識別するために単一の preg_replace パターンを書くことは可能ですか?

メールアドレスについても同じことを行う必要があり、メールテキストで見つかったすべてのメールアドレスで[検閲済み]に置き換えたい. つまり

mlanXXX@hotmail.com
mlanXXX AT hotmail.com

運が良ければ ..

4

1 に答える 1

2

私はFirefoxで広く使用されている単位変換拡張機能の作成者です。そのため、非敵対的な設定で情報を伝えたいときに、人々が人間の言語で物事を書く方法について多くの経験があります。つまり、積極的に検閲しようとする敵に邪魔されない場合です。そして、その文脈でさえ、正規表現が彼らが伝えようとしていることを常に理解することは不可能です。

私はこの答えを提供するために長い紹介が必要でした:いいえ、それはできません。あなたにできることは軍拡競争に参加することです。つまり、現在機能している最小限の正規表現を実装してから、ユーザーのコミュニケーションを継続的に監視し、ユーザーが思いついたものに基づいて正規表現を改善して、回避します。

ただし、すぐに迷惑な誤検知に悩まされることになるため、満足のいく解決策が見つかることは決してないことに注意してください。たとえば、「amazon.comでこれらの靴を見つけました」としましょう。あなたのコードはそれを「私はこれらの[検閲済み]を見つけました」に変更します。電話番号はさらに悪いです。なぜなら、人々は選択された数字を単語として書くことができるからです( "043three376five ...")、それであなたはどんな番号のすべての言及も検閲しなければならないでしょう。

これは本質的に社会的な問題であり、技術的な手段では解決できません。もし私があなただったら、私はいくつかの明白な正規表現を実装し(したがって、率直なユーザーの99%を捕らえます)、社会的ルールでルールを適用します。つまり、EULAを回避しようとする人々を追い出すことによってEULAを実施します。

于 2012-08-26T05:01:39.133 に答える