将纯文本转换为JavaScript中的超链接

2bornot2b

我有一个用例,需要识别字符串中的电话号码并将其转换为可点击的链接。当前无法使用外部库。

到目前为止,这是我所做的:

字符串:“这是我的电话号码-1234567890”我可以使用正则表达式模式将1234567890提取为电话号码。

我现在想将其替换为原始字符串,所以这就是我所做的:

const string = "This is my phone number - 1234567890"
const number = "1234567890"
const newString = '<a href="#">' + number + '</a>'
number = number.replace(number, newString);

当我这样做时,而不是将电话号码作为超链接获取,我的输出是这样的:

This is my phone number - <a href="#">1234567890</a>

如果我创建不带引号的newString,像这样

const newString = <a href="#">number</a>

我的输出是这样的:

This is my phone number - [object Object]

如何使它成为可点击的链接?

或Drori

您需要替换以用链接包装电话号码,然后使用dangerouslySetInnerHTML添加到React组件。

注意:dangerouslySetInnerHTML之所以这样称呼,是因为您对来自用户生成的内容的XSS攻击持开放态度。您应该先清理字符串。

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主要问题就是将字符串分成链接/非链接字符串。这可以通过使用此答案中的代码来完成我已经更新了代码,将字符串标记为匹配项,因此您可以相应地设置其格式。

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>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

随机将纯文本转换为纯JavaScript的可点击链接

来自分类Dev

如何使用xslt将xml中的文本转换为html中的超链接

来自分类Dev

如何使用xslt将xml中的文本转换为html中的超链接

来自分类Dev

PHP将纯文本转换为标签链接

来自分类Dev

PHP将纯文本转换为hashtag链接

来自分类Dev

如何将一列带有超链接的文本转换为 Excel 中的文本 URL?

来自分类Dev

将外部超链接转换为超链接公式

来自分类Dev

使用JavaScript将纯文本列表转换为HTML列表

来自分类Dev

使用javascript将纯文本转换为CSS值

来自分类Dev

使用Javascript将HTML转换为纯文本

来自分类Dev

使用javascript将嵌套列表转换为缩进的纯文本

来自分类Dev

将TextView转换为超链接

来自分类Dev

将表单的按钮转换为超链接

来自分类Dev

将数组索引转换为超链接

来自分类Dev

将TextView转换为超链接

来自分类Dev

如何将Excel中的数百个文本URL转换为可单击的超链接?

来自分类Dev

将丰富的MarkDown转换为纯文本

来自分类Dev

将HTML转换为适当的纯文本?

来自分类Dev

将纯文本转换为HTML

来自分类Dev

将HTML转换为UNFORMATTED纯文本?

来自分类Dev

将Atom XML转换为纯文本

来自分类Dev

将MediaWiki的输出转换为纯文本

来自分类Dev

将 rtf 格式转换为纯文本

来自分类Dev

Angular2将纯文本转换为url的方式(锚链接)

来自分类Dev

将纯文本电子邮件转换为可点击的链接-REGEX / jQuery

来自分类Dev

如何使用Javascript将字符串转换为超链接?

来自分类Dev

使用XSS过滤器将文本链接转换为Javascript中的多种HTML格式

来自分类Dev

将一列文字网址转换为Shiny中的活动超链接

来自分类Dev

将链接转换为超文本或文本

Related 相关文章

热门标签

归档