2

数字がアラビア語かどうかを確認し、数字をすべて英語に置き換えて計算できるようにしたい。この Function を試していますが、どの正規表現が適しているのかわかりません:

function enNumber(num)
{
for (var i=0;i<10;i++)
num=num.replace(*[regular expression]*,i);
return num;}
4

1 に答える 1

3

聞かれた質問に対する最低限の解決策

これはあなたが求めたものを解決するはずです:

function fromArabicToASCII(arabic) {
  return arabic.replace(
    /[\u0660-\u0669\u06F0-\u06F9]/g,
    function(a) {
      return String.fromCharCode((a.charCodeAt(0)&15)+48);
    }
  );
};

Unicode クラス Nd (Number, Decimal Digit) のすべての既知の数字に対する一般関数

以下の関数は、Unicode クラス Nd (数値、10 進数) をサポートしています: Adlam、Ahom、アラビア語インド語、バリ語、ベンガル語、Bhaiksuki、Brahmi、Chakma、Cham、Devanagari、拡張アラビア語インド語、全角、グジャラート語、グルムキー語、ジャワ語、カンナダ語、カヤ リー、クメール語、クダワディ語、ラオス語、レプチャ語、リンブー語、マラヤーラム語、数学的な太字、数学的なダブルストラック、数学的なモノスペース、数学的なサンセリフの太字、数学的なサンセリフ語、ミーテイ マエク、モディ語、モンゴル語、ムロ語、ミャンマー語シャン、ミャンマー タイ レイン、ミャンマー、ニュー タイ ルー、ネワ、ンコ、オル チキ、オリヤ、オスマンヤ、パハウ モン、サウラーシュトラ、シャラダ、シンハラ リス、ソラ ソンペン、スンダ、タイ タム ホラ、タイ タム タム、タクリ、タミル、テルグ語、タイ語、チベット語、ティルフタ語、ヴァイ語、ワランシティ語。

ローマ数字やその他の非 10 進数は 10 進数ではないため、サポートされていません。

// This function takes an UTF16 encoded string as input,
// and returns with all suported digits from Unicode
// class 'Nd' (Number, Decimal Digit) replaced with their
// equivalent ASCII digit.
// Source : http://stackoverflow.com/a/12171250/36866
// License: MIT
// Author : some@domain.name
// Note   : If you are going to use this code I would appreciate to
//          get an email to some@domain.name. You don't have to but
//          it would make me happier!
var digitsToASCII=
  (function () {
    // Regexp that matches all supported digits.
    // Most Unicode digit classes have the zero digit at a codepoint
    // where the four least significant bits are ether zero or six.
    // The notable exception is the Math-class where several classes
    // have sequential codepoints. The information about the offset
    // is needed when decoding, and by using groups in the RexExp
    // no lookup is needed.
    var reDigit = new RegExp(
      '('+ // Offset 0
        '['+
          '\u0030-\u0039\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9'+
          '\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049'+
          '\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u19D0-\u19D9'+
          '\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9'+
          '\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9'+
          '\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59'+
          '\uABF0-\uABF9\uFF10-\uFF19'+
        ']'+
        '|\uD801[\uDCA0-\uDCA9]'+
        '|\uD804[\uDCF0-\uDCF9\uDDD0-\uDDD9\uDEF0-\uDEF9]'+
        '|\uD805['+
          '\uDC50-\uDC59\uDCD0-\uDCD9\uDE50-\uDE59'+
          '\uDEC0-\uDEC9\uDF30-\uDF39'+
        ']'+
        '|\uD806[\uDCE0-\uDCE9]|\uD807[\uDC50-\uDC59]'+
        '|\uD81A[\uDE60-\uDE69]|\uD81A[\uDF50-\uDF59]'+
        '|\uD83A[\uDD50-\uDD59]'+
      ')|('+ // Offset 6
        '['+
          '\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF'+
          '\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF'+
          '\u0D66-\u0D6F\u0DE6-\u0DEF\u1946-\u194F'+
        ']'+
        '|\uD804[\uDC66-\uDC6F\uDD36-\uDD3F]'+
      ')|('+ // Math
        '\uD835[\uDFCE-\uDFFF]'+
      ')',
      'g'
    );

    function replace(match, offset0, offset6, offsetMath) {
      // 'match' contains the whole match and can therefore have
      // a length longer than one character if surrogate pairs is used.
      // By getting the last character from 'match' the operation is simplified.
      var raw = match.charCodeAt( match.length - 1);
      var digit =
        offset0 ? raw & 0xF : // use 4 bits
        offset6 ? (raw -6) & 0xF : // subtract 6, use 4 bits
        offsetMath ? ((raw - 0xCE) & 0x3F) % 10 : // subtract CE, use 6 bits
        null;

      return String.fromCharCode(48 + digit); // Digit to ASCII
    }

    return function replaceDigits(input) {
      return input.replace(reDigit, replace);
    }
  })();

使用法:

myAsciiVariable = digitsToASCII( myForeignVariable );

node.js のモジュール

これと同様の関数が、 という node.js モジュールで利用できるようになりましたunicodedigits。この関数は、サポートされている任意の数字から ASCII またはサポートされている任意の範囲に変換できます。

でインストールするか、 github.com/somec/unicodedigitsnpm install unicodedigits --saveで見つけることができます。

于 2012-08-29T05:10:44.487 に答える