亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 preg_replace 檢測電話號碼和一些細節

使用 preg_replace 檢測電話號碼和一些細節

PHP
米琪卡哇伊 2021-11-13 19:18:10
這是一個基本的 preg_replace 檢測電話號碼(和長號碼)。我的問題是我想避免檢測雙斜杠""、單''斜杠和正斜杠之間的數字//$text = preg_replace("/(\+?[\d-\(\)\s]{8,25}[0-9]?\d)/", "<strong>$1</strong>", $text);我四處探查,但沒有什么對我有用。您的幫助將不勝感激。
查看完整描述

2 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

似乎您沒有在驗證,那么您可能正在嘗試編寫一些邊界較少的表達式,例如:

^\+?[0-9()\s-]{8,25}[0-9]$

如果你想簡化/修改/探索表達式,它已經在regex101.com 的右上角面板中進行了解釋。如果您愿意,您還可以在此鏈接中觀看它如何與某些示例輸入匹配。


查看完整回答
反對 回復 2021-11-13
?
米脂

TA貢獻1836條經驗 獲得超3個贊

我預測您的模式會讓您失望而不是讓您滿意(或者您對項目范圍內的“過度匹配”感到非常滿意)。


雖然我的建議確實超出了模式長度,但(*SKIP)(*FAIL)通過消耗和丟棄需要取消資格的子字符串,一種技術可以很好地為您服務??赡苡幸环N方法可以通過環視來指示模式邏輯,但是由于初始模式中有如此多的潛在漏洞且沒有樣本數據,因此變量太多,無法提出自信的建議。


代碼:


$text = <<<TEXT

A number 555555555 then some more text and a quoted number "(123)4567890" and

then 1 2 3 4     6 (54) 3 -2 and forward slashed /+--------0/ versus

+--------0 then something more realistic '234 588 9191' no more text.

This is not closed by the same character on both

ends: "+012345678901/ which of course is a _necessary_ check?

TEXT;


echo preg_replace(

         '~([\'"/])\+?[\d()\s-]{8,25}\d{1,2}\1(*SKIP)(*FAIL)|((?!\s)\+?[\d()\s-]{8,25}\d{1,2})~',

         "<strong>$2</strong>",

         $text);

輸出:


A number <strong>555555555</strong> then some more text and a quoted number "(123)4567890" and

then <strong>1 2 3 4     6 (54) 3 -2</strong> and forward slashed /+--------0/ versus 

<strong>+--------0</strong> then something more realistic '234 588 9191' no more text.

This is not closed by the same character on both

ends: "<strong>+012345678901</strong>/ which of course is a _necessary_ check?

有關技術細分,請參閱 Regex101 鏈接。


否則,這是有效地檢查“電話號碼”(由最初的模式),如果它們被包裹',"或/則匹配被忽略,正則表達式引擎繼續尋找那個子后的比賽。我(?!\s)在您的電話模式的第二次使用開始時添加了,以便在替換時省略前導空格。


查看完整回答
反對 回復 2021-11-13
  • 2 回答
  • 0 關注
  • 205 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號