我有一个现有的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("<br/>"), "<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>
答案 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( /<br\/>/g, "<br/>" );
}
console.log( replace_chat_tags( 'hello http://www.google.com foo@bar.com<br/>foo<br/>' ) );
不要忘记使用.innerHTML
将其附加到您的元素上。并确保不允许<script>
,<a href="javascript:*">
和任何<* on*="*">
标记。
我还建议只实施一次。使用PHP或JS转换聊天消息。