如何在javascript中使用regex链接unicode数字

how to linkify unicode numbers in javascript using regex

本文关键字:regex 链接 unicode 数字 javascript      更新时间:2023-09-26

如何更改下面的正则表达式以选择unicode数字?当前只选择ASCII码。

function numberfy(text) {
    var urlRegex = /[+0-9]+(?:'.[0-9]*)?[0-9]{5,}/g;
    return text.replace(urlRegex, function(url) {
        return '<font color="blue"><u><a href="tel:' + url + '">' + url + '</a></u></font>';
    });
}

谢谢

您的问题不清楚,但如果您希望包含替代的Unicode数字形式,例如Unicode全宽字符,您可以像这样添加显式的Unicode范围:

// Adds the full-width unicode range FF10-FF19 (    0-9)
var urlRegex = /[+0-9'uFF10-'uFF19]+(?:'.[0-9'uFF10-'uFF19]*)?[0-9'uFF10-'uFF19]{5,}/g;

一个工作示例。您可以通过简单地添加它们来添加其他范围。我很想修改你的代码,这样你就可以减少重复,如果你有多个范围:

var digit = "0-9'uFF10-'uFF19";
var urlRegex = new RegExp("[+"+digit+"]+(?:''.["+digit+"]*)?["+digit+"]{5,}", "g");

可以在这里找到可供选择的Unicode数字形式的列表。这包括其他语言的其他表单。

请注意,只有2字节的Unicode值将工作(直到'uFFFF)。在该页面上,它们包括一些扩展表单(例如,Mathematical Bold),这些表单超出了JavaScript支持的2字节Unicode范围。

Javascript中,您必须包含每个文化的unicode数字范围。

可以使用'uxxxx指定范围,其中x为十六进制。

因此您可以匹配特定文化的数字,例如

['u0966-'u096F]+//matches `Devangiri` digits
['u0E50-'u0E59]+//matches `Thai` digits
['d'u0966-'u096F'u0E50-'u0E59]+//matches `Thai`,`Devangiri`,`ascii` digits

您可以在这里找到所有区域性的unicode数字范围


可以使用xregexp库,其中可以使用

'p{N}匹配任何Unicode数字


如果您对涵盖所有文化的完整系列感兴趣。

0030 - 003900 b200b300b900bc - 00 - be0660 - 066906 - f0 - 06 - f907c0 - 07 - c90966 - 096 f09e6 - 09 - ef09f4 - 09 - f90a66 - 0 - a6f0ae6 0 - aef0b66 0 - b6f0b72 - 0 - b770be6 - 0 - bf20c66 0 - c6f0c78 0 - c7e0ce6 - 0 - cef0d66 - 0 - d750e50 0 - e590ed0 0 - ed90f20 - 0 - f331040 - 10491090 - 10991369 - 137 - c16ee - 16 - f017e0 17 - e917f0 - 17 - f91810 - 18191946 - 194 - f19d0 - 19 - da1a80 1 - a891a90 - 1 - a991b50 - 1 - b591bb0 - 1 - bb91c40 - 1 - c491c50 - 1 - c5920702074 - 20792080 - 20892150 - 21822185 - 21892460 - 249 b24ea - 24 - ff2776 27932 - cfd30073021 - 30293038 - 303 - a3192 - 30293038 - 30293038 - 324 - f3251 - 325 f3280 - 328932 - b1 - 32 - bfa620 a629a6e6 a6efa830 -A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19

参考这里

来自评论@Alexey我更新了我的答案:

在您的评论"123٧٨٩"中,这些都是阿拉伯数字

 ARABIC-INDIC DIGIT---> 'u0660-'u0669
 EXTENDED ARABIC-INDIC DIGIT---> 'u06F0-'u06F9

try this pattern

[+0-9'u0660-'u0669'u06F0-'u06F9]+(?:'.[0-9'u0660-'u0669'u06F0-'u06F9]*)?[0-9'u0660-'u0669'u06F0-'u06F9]{5,}

如果你想要任何unicode符号你可以在这里搜索那个符号http://www.ltg.ed.ac.uk/~richard/unicode-sample-3-2.html