jquery正则表达式匹配网址和电子邮件

时间:2017-10-14 19:52:53

标签: javascript jquery regex

我有一个现有的php函数来检测块消息中的电子邮件和URL,然后按照它的设想替换它。现在我需要在PHP中使用相同的功能,但我无法正确使用正则表达式。有人可以帮忙吗?

<?php
function replace_chat_tags($chat_body=''){
     $chat_body = preg_replace('!(http|ftp|scp)(s)?:\/\/[a-zA-Z0-9.?=\-&_/]+!', "<a href=\"\\0\" target=\"_blank\">\\0</a>", $chat_body);
     $chat_body = preg_replace('/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/si', "<a href=\"mailto:\\0\">\\0</a>", $chat_body);
     $chat_body = str_replace(array("&lt;br/&gt;"), "<br/>", $chat_body);
     return $chat_body;
 }
?>

在js

<script>
function replace_chat_tags(chat_body){
var chat_body;
  chat_body.replace(); //For urls
  chat_body.replace(); // Email Link
  chat_body.replace(); // I need this for a reason
  return chat_body;
}
</script>

1 个答案:

答案 0 :(得分:2)

你可以用例如在线测试正则表达式。 regex101。它也提供了JavaScript风格。

反正:

function replace_chat_tags(chat_body = '') {
  return chat_body
    .replace( /((http|ftp|scp)(s)?:\/\/[a-zA-Z0-9.?=\-&_/]+)/g, "<a href=\"$1\" target=\"_blank\">$1</a>" )
    .replace( /\b([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4})\b/gi, "<a href=\"mailto:$1\">$1</a>" )
    .replace( /&lt;br\/&gt;/g, "<br/>" );
}

console.log( replace_chat_tags( 'hello http://www.google.com foo@bar.com&lt;br/&gt;foo&lt;br/&gt;' ) );

不要忘记使用.innerHTML将其附加到您的元素上。并确保不允许<script><a href="javascript:*">和任何<* on*="*">标记。

我还建议只实施一次。使用PHP或JS转换聊天消息。