Özensiz telefon numaralarını gizlemek için Fonksiyon

4 Cevap php

I need to hide phone numbers (and maybe other contact details) in user generated content to protect my users from anonymous web. Input is very random, therefore I'd be looking to replace anything that looks like a phone number (e.g.: string of 3 or more numbers) with just dots, and also perhaps remove some exotic notations of e-mail addresses.

Bunu yapmanın en iyi yolu nedir? Güzel ve kaygan, yeniden kullanılabilir. Gizli Regexes uzak verin. Herhangi bir dilde yazın. Belki COBOL hariç :)

function privacy($str){
    // protect phone numbers

    // protect e-mail addresses

    // protect web addresses

}

4 Cevap

Aslında bu korkunç bir fikir olduğunu.

. Girdi kısa bir shingle (telefon) ya da bir kara üzerinde bir şey ('@', '[at]', '. Com', 'co ardışık rakam bir sürü içerir olmadığını kontrol edin: Daha şık bir şey ile sona erdi. on uk '...) her bir göz için admin için kaydedin ve bayrak.

Python, dize üç nokta ile üç veya daha fazla basamak değiştirmek için s:

import re
s = re.sub(r'\d{3,}', '...', s)

Bana ayrıştırmak için "e-posta adresleri Egzotik gösterimler" zordur; belki s / şey gibi yani

s = re.sub(r'[\w.]+@[\w.]+', '<email redacted>', s)

Web adresleri ben URL'leri yani tahmin ediyorum. Olası tüm alanları içeren bir dizi oluşturmak olabilir (".ca",".com",".uk"....). Daha sonra bir regex etki birini içeren herhangi bir 'kelime' üzerinde yerini çalıştırabilirsiniz.

Değiştirme yapmak için Alec MARTELLI kodunu kullanmak ve yerine replasman '@' koyarak yapabilirsiniz etki dizi katılmak koydu. Join fonksiyonu this sitesinde açıklanmıştır.

Perl'de Ben maç gibi yapardı:

my $domainsString = join("|", @arrayOfPossibleDomains);
$s =~ s/\w+[$domainString]\w+/......./g;

Sadece a ile herhangi bir alfasayısal karakteri değiştirir basit işlevi oluşturabilirsiniz "." veya istediğiniz başka bir karakter.

Örneğin:

function HideInput($input) {
    $input = preg_replace("([a-zA-Z0-9])", "*", $input);
    return $input;
}