You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改JavaScript正则以支持西里尔文与拉丁文的URL和邮箱验证

支持西里尔文的URL/邮箱匹配正则修改方案

原正则的核心问题在于:

  • JavaScript默认的\w仅匹配拉丁字母、数字和下划线,不包含西里尔字符
  • \b单词边界对非拉丁字符的识别逻辑不适用,会导致匹配失效
  • 最后一部分的[A-Za-z]限制只能匹配拉丁后缀,无法识别.рф这类西里尔域名后缀

以下是修改后的完整代码:

let final = text;
const divElement = document.createElement('div');
// 修改后的正则,支持Unicode字符(含西里尔文)
const linkRegExp = /(?<!\S)((https?:\/\/)?[\p{L}\p{N}_-]+(?:[:.][\p{L}\p{N}_-]+)+)|([\p{L}\p{N}_-]+@[\p{L}\p{N}_-]+(?:\.[\p{L}\p{N}_-]+)+)(?!\S)/gui;

function replacer(url) {
  if (url.match(/[\p{L}\p{N}_-]+@[\p{L}\p{N}_-]+(?:\.[\p{L}\p{N}_-]+)+/ui)) {
    const email = document.createElement('a');
    email.innerHTML = url;
    email.href = `mailto:${url}`;
    email.setAttribute('class', 'email');

    return email.outerHTML;
  }
  const link = document.createElement('span');
  link.innerHTML = url;
  link.setAttribute('class', 'link');
  link.setAttribute('style', 'color: blue; cursor: pointer');

  return link.outerHTML;
}

final = final.replace(linkRegExp, replacer);

关键修改说明:

  • 使用\p{L}\p{N} Unicode属性转义:\p{L}匹配任意语言的字母(含西里尔文),\p{N}匹配任意数字,替代原有的\w,确保支持多语言字符
  • 替换\b为(?<!\S)和(?!\S):通过负向环视匹配前后为空白或字符串边界,解决非拉丁字符的单词边界识别问题
  • 移除原正则中过于严格的{1,32}长度限制:避免截断合法的长域名(如стопкоронавирус.рф)
  • 修改邮箱匹配正则为Unicode兼容版本,确保识别含西里尔文的邮箱地址
  • 添加u标志:启用正则的Unicode模式,让\p{}属性转义生效

测试支持的示例:

  • 西里尔域名:яндекс.рф、стопкоронавирус.рф
  • 带协议的西里尔链接:https://яндекс.рф/news
  • 西里尔邮箱:пользователь@стопкоронавирус.рф
  • 混合字符链接:site-рус.ru、https://mix-domain.рф

内容的提问来源于stack exchange,提问作者Ваш ГОСТ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 22:41:05