第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在javascript中將純文本轉(zhuǎn)換為超鏈接

在javascript中將純文本轉(zhuǎn)換為超鏈接

千萬里不及你 2021-11-25 19:15:29
我有一個(gè)用例,我需要識別字符串中的電話號碼并將它們轉(zhuǎn)換為可點(diǎn)擊的鏈接。目前使用外部庫超出了范圍。這是我到目前為止所做的:字符串:“這是我的電話號碼 - 1234567890” 我可以使用正則表達(dá)式提取 1234567890 作為電話號碼。我現(xiàn)在想在原始字符串中替換它,所以這就是我所做的:const string = "This is my phone number - 1234567890"const number = "1234567890"const newString = '<a href="#">' + number + '</a>'number = number.replace(number, newString);當(dāng)我這樣做時(shí),我的輸出不是將電話號碼作為超鏈接,而是這樣的:This is my phone number - <a href="#">1234567890</a>如果我創(chuàng)建沒有引號的 newString,就像這樣const newString = <a href="#">number</a>我的輸出是這樣的:This is my phone number - [object Object]我如何使它成為可點(diǎn)擊的鏈接?
查看完整描述

3 回答

?
慕森卡

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊

您需要將電話號碼替換為鏈接,然后用于dangerouslySetInnerHTML添加到 React 組件。


注意:dangerouslySetInnerHTML之所以調(diào)用它,是因?yàn)槟菀资艿絹碜杂脩羯蓛?nèi)容的 XSS 攻擊。您應(yīng)該先對琴弦進(jìn)行消毒。


const Linkify = ({ text, pattern, formatter }) => {

  const __html = text.replace(pattern, formatter);


  return <div dangerouslySetInnerHTML={{ __html }} />;

};


const text = 'This is my phone number - 1234567890';

const pattern = /\d+/g;

const formatter = str => `<a href="#${str}">${str}</a>`;


ReactDOM.render(

  <Linkify text={text} pattern={pattern} formatter={formatter} />,

  root

);

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>


<div id="root"></div>


不使用dangerouslySetInnerHTML主要問題是將字符串分解為鏈接/非鏈接字符串。這可以通過使用此答案中的代碼來完成。我更新了代碼以將字符串標(biāo)記為匹配項(xiàng),因此您可以相應(yīng)地設(shè)置它們的格式。


const Linkify = ({ text, pattern, formatter }) => {

  const arr = getSegments(pattern, text);


  return arr.map(formatter);

};


const text = 'This is my phone number - 1234567890, and his is 34234123142';

const pattern = /\d+/g;

const formatter = ({ text, match }) => match ? <a href={`#${text}`}>{text}</a> : text;


ReactDOM.render(

  <Linkify text={text} pattern={pattern} formatter={formatter} />,

  root

);


function getSegments(rex, str) {

  const segments = [];

  let lastIndex = 0;

  let match;

  rex.lastIndex = 0; // In case there's a dangling previous search

  while (match = rex.exec(str)) {

    if (match.index > lastIndex) {

      segments.push({ text: str.substring(lastIndex, match.index) });

    }

    segments.push({ text: match[0], match: true });

    lastIndex = match.index + match[0].length;

  }

  if (lastIndex < str.length) {

    segments.push({ text: str.substring(lastIndex) });

  }

  return segments;

}

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>


<div id="root"></div>


查看完整回答
反對 回復(fù) 2021-11-25
?
紅顏莎娜

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊

您真的不想將“字符串”設(shè)置為const newString,我會(huì)稱其為元素。你可以這樣做:


const phoneEl = (

  <a href="#">

    {number}

  </a>

);

哪里number是存儲(chǔ)在一個(gè)名為變量的電話號碼number。


然后你會(huì)寫:


<p>My phone number is - {phoneEl}</p>

我也建議


<href={`tel:${number}`}>

如果您希望人們能夠單擊鏈接并撥號。


查看完整回答
反對 回復(fù) 2021-11-25
?
慕桂英4014372

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超13個(gè)贊

const string = document.querySelector("body");

const text = string.innerText;


const textArr = text.split(" ").map(item => {

  if(item.match(/^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/im)){

    item = `<a href="tel:${item}">${item}</a>`;

  }

  return item;

});


const newText = textArr.join(" ");


console.log({ newText })


string.innerHtml = newText;

<p class="body">

  This is my phone number - 555-555-5555

</p>


查看完整回答
反對 回復(fù) 2021-11-25
  • 3 回答
  • 0 關(guān)注
  • 996 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號