3

如何更改下面的正则表达式以同时选择 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>';
    });
}

谢谢

4

3 回答 3

1

In Javascript you would have to include unicode number range for every culture.

You can specify the range using \uxxxx where x is hexadecimal..

So you can match digits of specific cultures like

[\u0966-\u096F]+//matches `Devangiri` digits
[\u0E50-\u0E59]+//matches `Thai` digits

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

You can find unicode number range for all cultures here


Instead you can use xregexp library in which you can use

\p{N} to match any Unicode number


If you are interested in complete range that covers all cultures.

0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0B72-0B770BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293248-324F3251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19

Refer here

于 2013-04-17T03:34:09.710 回答
1

您的问题尚不清楚,但如果您希望包含替代的 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)。在该页面上,它们包含一些超出 JavaScript 支持的 2 字节 Unicode 范围的扩展形式(例如,数学粗体)。

于 2013-04-17T03:40:31.433 回答
-1

From Comment @Alexey i updated my answer:

in you comment "123٧٨٩" thease are arabic digits

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

try this pattren

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

if you want any unicode symbol then you can search that symbol here http://www.ltg.ed.ac.uk/~richard/unicode-sample-3-2.html

于 2013-04-17T03:29:48.257 回答