1

わかりましたので、これについて助けを求める私の以前の投稿を読み直した後、私がやろうとしていることを正確に明確にしておらず、その理由を指摘していないことに気付きました. 私は開発に忙しいサイトを持っており、人々が電話番号を残した場合にメッセージを表示する可能性があります (これはばかげていますが)。最初に、変数 $messagetext に格納されているメッセージ テキストを検索する必要があります。次に、preg_replace() 関数を使用して番号の一部をマスクする必要があるため、番号が何であるかが明確ではないため、誰かがメッセージを残し、彼らの番号は「07921234567」で、メッセージでは「07**12*45**」と表示されます。これはどのように行われますか?私が望むのは、私がどのような機能を持っているかを見つけることだけです'

$extractednum = preg_replace( "/[0-9]/","*",$extractednum);
echo ($extractednum);

これが行うことは、番号全体を置き換えることだけです。私がこれをしたくない理由は、ソーシャル ネットワーキングのプライバシーを扱うために取り組んでいる別のサイトも持っており、例として取得した電話番号の一部をマスクする必要があるためです。

うまくいけば、これはより明確になり、誰かが素晴らしいコードで私を助けることができれば!

何でも大歓迎です!

4

3 に答える 3

2

あなたが探している正規表現はこれだと思います:

(00447|\+?447|07)([0-9]{9})

電話番号をマスクするには、次preg_replace_callback()のようなカスタム コールバックが必要です。

$extractednum = preg_replace_callback( "/(00447|\+?447|07)([0-9]{9})/", function( $matches) {
    // This will return the number unmodified
    // return $matches[1] . $matches[2]; 
    // Instead, set whichever characters you want to be "*" like this:
    $matches[2][0] = $matches[2][1] = $matches[2][4] = $matches[2][7] = $matches[2][8] = "*";
    return $matches[1] . $matches[2]; 
} , $extractednum);

デモで動作することがわかります。たとえば、入力の出力は出力として0792123456707**12*45**られます。

于 2012-07-25T14:18:28.853 に答える
0

有効な英国の電話番号にいくつの番号があるかわかりません。11個の数字があるとしましょう:

preg_replace(/(\d{2})\d{2}(\d{2})\d(\d{2})\d{2}/, "$1**$2*$3**");

異なる長さの電話番号が存在する可能性があり、視覚的な目的で番号にスペースを入れることができると推測しているため、これは正確な解決策ではありません。

于 2012-07-25T14:19:49.593 に答える
0
<?PHP
function maskTelephoneNumber($phonenumber, $trim, $maskCharacter)
{
$suffixNumber = substr($phonenumber, strlen($phonenumber)-$trim,$trim); 
$prefixNumber = substr($phonenumber, 0, -$trim); 

for ($x = 0; $x < strlen($prefixNumber); $x++):
    $str.= ( is_numeric($prefixNumber[$x]) )? str_replace($prefixNumber[$x], $maskCharacter, $prefixNumber[$x]) : $prefixNumber[$x];
endfor;

return  $str.$suffixNumber;     
}

$trim = 4;
$maskCharacter='*';
$phonenumber = '555-666-7777';

echo maskTelephoneNumber($phonenumber,$trim, $maskCharacter);
于 2016-04-06T14:45:42.273 に答える