簡體   English   中英

php中的正則表達式匹配

[英]Regular expression matching in php

我有這個正則表達式:

/(.*)(([0-9]([^a-zA-Z])*){7,}[0-9])(.*)/.

給定以下值

0654535263
065453-.-5263
065asd4535263

預期成績

06**** 
06****
06****

實際結果

0654535263
06****
065asd4535263

由於字母的原因,它不匹配最后一行(我想匹配 0-3 個字母)並且它只匹配最后一次出現(在示例中的第二行,它跳過第一行)。

首先,謝謝你所有的回答都非常有幫助,我欠你的時間。 我不能創建數字數組並像這樣屏蔽它們,因為我可以有這樣的字符串:

我是約翰,我住在 bla bla 我的電話是:0, 6, 5, 4, 5, 3, 5, 2, 6 - 3 -- 065asd4535263。

為簡化起見,我想隱藏輸入的手機號碼。

我有兩個問題:

  1. 更改上面提到的 regxp,以隱藏由不超過 3 個字符分隔的數字。
  2. preg_replace 只替換了一次。

最后,我只需要 regexp 來替換任何數字數組,至少 6 位長,由任意數量的特殊字符(12--654-5、453/--222、23....5645 等)分隔或不超過 3 個字符(ltters)(06asd453、123as562)。

再次感謝您,所有答案都非常有幫助,但我很生氣,因為我沒有正確表達我的問題。

ps我不能給你聲譽,因為我必須至少有15個,一旦我得到那么多,我就會“投票”,所有的答案都值得。

嗯,當你只想給你的繩子做睫毛膏時,為什么這么復雜。

$input = '0654535263';
$input = substr($input, 0, 2);
$output = $input . '********';

當您只想要字符串的前 2 個字符時,它會更容易一些。 也許你的解決方案有另一個罪過。 但這要容易一些。

你可以只使用substr_replace

 echo substr_replace($v, "****", 2);

例子

$list = array("0654535263","065453-.-5263","065asd4535263");
echo "<pre>";
foreach ( $list as $v ) {
    echo substr_replace($v, "****", 2), PHP_EOL;
}

輸出

06****
06****
06****

我猜你想使用正則表達式的原因是你不會屏蔽你得到的每個字符串。 這個正則表達式檢查字符串的開頭是否至少有 2 個數字,然后是 0 到 3 個字母字符,然后字符串的所有其余字符都需要是非字母字符。 如果匹配,則屏蔽該字符串,否則表示該字符串不匹配。

$string = '0654535263';
if(preg_match('~^(\d{2})\d*?[a-zA-Z]{0,3}[^a-zA-Z]*$~', $string))
  $answer = preg_replace('~^(\d{2})\d*?[a-zA-Z]{0,3}[^a-zA-Z]*$~', '$1****', $string);
else
  $answer = $string . ' does not match';
print_r($answer); // 06****

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM