[英]Regular expression matching in php
我有這個正則表達式:
/(.*)(([0-9]([^a-zA-Z])*){7,}[0-9])(.*)/.
給定以下值
0654535263
065453-.-5263
065asd4535263
06****
06****
06****
0654535263
06****
065asd4535263
首先,謝謝你所有的回答都非常有幫助,我欠你的時間。 我不能創建數字數組並像這樣屏蔽它們,因為我可以有這樣的字符串:
我是約翰,我住在 bla bla 我的電話是:0, 6, 5, 4, 5, 3, 5, 2, 6 - 3 -- 065asd4535263。
為簡化起見,我想隱藏輸入的手機號碼。
我有兩個問題:
最后,我只需要 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.