php preg_replace - 替换社交的一部分

时间:2011-10-17 13:49:39

标签: php regex replace mask social

我想找到任何模式匹配:###-##-####

并将###-##,替换为***-**

但保留-####

我在下面尝试了这个,但根本没有任何替换。

preg_replace('/(^[\d]{3})(-)([\d]{2})(-[\d]{4}$)/','\2\4',$myText);

感谢任何帮助


更新,这是我目前的完整代码字符串,在尝试了下面的一些建议之后。我将第二个回声输出与第一个相比较......并且社交数字都保持不变。

另外,正如下面提到的,我的字符串确实包含的不仅仅是一个社交...它长达数千个字符。我认为这是我真正的问题。对不起,如果我在开始时没有清除它。

    //Make the CSC credit report request.
    $strCscResponse = $Csc->makeRequest($strFixedFormatRecord);

    echo "<br/><br/><pre>" . $strCscResponse  . "</pre><br/><br/>";

    $strCscResponse = str_replace("!", " ", $strCscResponse);

    $strCscResponse = preg_replace('/^\d{3}-\d{2}(-\d{4})$/','***-**$1',$strCscResponse);

    echo "<br/><br/><pre>" . $strCscResponse  . "</pre><br/><br/>";

更新

我想标记所有答案和“答案”只是因为我没有澄清字符串不仅仅是社交内容。谢谢你对这个问题的帮助,令人尴尬的是,它已经让我疯狂了几天了。

4 个答案:

答案 0 :(得分:0)

试试这个正则表达式:

(\d{3})(-)(\d{2})(-\d{4})

答案 1 :(得分:0)

试试这个:

preg_replace('/^\d{3}-\d{2}(-\d{4})$/','***-**$1',$myText);

答案 2 :(得分:0)

  1. 你的模式中有^和$,但我看不到m修饰符,所以这个 只有### - ## - ####是整个字符串才会匹配。
  2. [\ d]可以 缩写为\ d
  3. 你的\ 2 \ 4将离开 - ####,如果你想* - #### 你可以简单地拥有* \ 4

答案 3 :(得分:0)

有一个可能的问题:您可能无法匹配正确的字符串(如果您尝试查找隐藏在大块文本中的SSN) - ^$锚点只会匹配字符串的开头(或者有时是行的开头) - 如果这不是你想要的,但是你想要在长字符串中找到SSN,你需要摆脱那些锚点。

另一个问题可能是你似乎想用星号替换东西,但你的替换表达式中没有包含星号。你需要使用像

这样的替换表达式
`***-**\4`