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

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

正則表達式將電子郵件轉換為名稱

正則表達式將電子郵件轉換為名稱

PHP
森欄 2023-05-26 16:10:41
preg_replace在將電子郵件地址轉換為在長文本塊中使用的名稱時,我需要一些幫助。我的電子郵件可以遵循兩種不同的結構:1) [email protected]或者2) [email protected]為了可能使這更復雜,在文本電子郵件地址中以 @ 開頭,例如:貓坐在墊子上,@[email protected] 靜靜地看著。應該:貓坐在墊子上,名字姓氏靜靜地看著。preg_replace("/\B@(\w*[a-z_.]+\w*)/i", "$1", $text)上面的代碼似乎成功地捕獲了我需要的部分,但保留了域。我需要刪除域并將任何句點轉換為空格。
查看完整描述

3 回答

?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

  1. 您的正則表達式過于復雜,格式可以簡化為:/@([^@\s]+)@[\w.\-]+/.

  2. 我很確定我知道你接下來的問題是什么......

  3. preg_replace_callback().

  4. 和...

$in = 'The cat sat on the mat whilst @[email protected] watched in silence.';


var_dump(

? ? preg_replace_callback(

? ? ? ? '/@([^@\s]+)@[\w.\-]+/',

? ? ? ? function($in) {

? ? ? ? ? ? $parts = explode('.', $in[1]);

? ? ? ? ? ? $parts = array_map('ucfirst', $parts);

? ? ? ? ? ? $name = implode(' ', $parts);

? ? ? ? ? ? $email = substr($in[0], 1);

? ? ? ? ? ? return sprintf('<a href="mailto:%s>%s</a>', $email, $name);

? ? ? ? },

? ? ? ? $in

? ? )

);

輸出:


string(118) "The cat sat on the mat whilst <a href="mailto:[email protected]>First Middle Last</a> watched in silence."

并且要記住,電子郵件地址幾乎可以是任何東西,這種粗暴的過度簡化可能會產生誤報/漏報和其他有趣的錯誤。


查看完整回答
反對 回復 2023-05-26
?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

如果電子郵件可以包含@并以可選的 開頭@,您可以使匹配更加嚴格,以可選的 @ 開頭并添加空格邊界(?<!\S)(?!\S)防止部分匹配。

請注意,[^\s@]它本身是一個廣泛匹配,可以匹配除 @ 或空白字符之外的任何字符

(?<!\S)@?([^\s@]+)@[^\s@]+(?!\S)

正則表達式演示

例如(使用 php 7.3)

$pattern = "~(?<!\S)@?([^\s@]+)@[^\s@]+(?!\S)~";

$strings = [

    "[email protected]",

    "[email protected]",

    "The cat sat on the mat whilst @[email protected] watched in silence."

];

foreach ($strings as $str) {

    echo preg_replace_callback(

            $pattern,

            function($x) {

                return implode(' ', array_map('ucfirst', explode('.', $x[1])));

            },

            $str,

    ) . PHP_EOL;

}

輸出


Firstname Lastname

Firstname Middlename Lastname

The cat sat on the mat whilst Firstname Lastname watched in silence.


查看完整回答
反對 回復 2023-05-26
?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

我剛剛測試過這個,它應該可以工作



$text="The cat sat on the mat whilst @[email protected] watched in silence @[email protected].";



echo preg_replace_callback("/\B\@([a-zA-Z]*\.[a-zA-Z]*\.?[a-zA-Z]*)\@[a-zA-Z.]*./i", function($matches){

    $matches[1] = ucwords($matches[1], '.');

    $matches[1]= str_replace('.',' ', $matches[1]);

    return $matches[1].' ';

}, $text);


// OUTPUT: The cat sat on the mat whilst Firstname Middlename Lastname watched in silence Firstname Lastname


查看完整回答
反對 回復 2023-05-26
  • 3 回答
  • 0 關注
  • 187 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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