Hướng dẫn convert arabic numbers to english javascript - chuyển đổi số Ả Rập sang javascript tiếng anh

90

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Làm thế nào tôi có thể chuyển đổi số tiếng Ba Tư/tiếng Ả Rập thành số tiếng Anh với một hàm đơn giản?

arabicNumbers = ["١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩", "٠"]
persianNumbers = ["۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹", "۰"]

Đó là cùng một lược đồ, nhưng các trang mã là khác nhau.

hỏi ngày 15 tháng 7 năm 2015 lúc 19:40Jul 15, 2015 at 19:40

7

Oneliner của tất cả 6 bản dịch có thể giữa các chữ số tiếng Anh, tiếng Ả Rập và tiếng Ba Tư. of all 6 possible translations between English, Arabic, and persian Digits.

const e2p = s => s.replace[/\d/g, d => '۰۱۲۳۴۵۶۷۸۹'[d]]
const e2a = s => s.replace[/\d/g, d => '٠١٢٣٤٥٦٧٨٩'[d]]

const p2e = s => s.replace[/[۰-۹]/g, d => '۰۱۲۳۴۵۶۷۸۹'.indexOf[d]]
const a2e = s => s.replace[/[٠-٩]/g, d => '٠١٢٣٤٥٦٧٨٩'.indexOf[d]]

const p2a = s => s.replace[/[۰-۹]/g, d => '٠١٢٣٤٥٦٧٨٩'['۰۱۲۳۴۵۶۷۸۹'.indexOf[d]]]
const a2p = s => s.replace[/[٠-٩]/g, d => '۰۱۲۳۴۵۶۷۸۹'['٠١٢٣٤٥٦٧٨٩'.indexOf[d]]]

e2p["asdf1234"] // asdf۱۲۳۴
e2a["asdf1234"] // asdf١٢٣٤
p2e["asdf۱۲۳۴"] // asdf1234
a2e["asdf١٢٣٤"] // asdf1234
p2a["asdf۱۲۳۴"] // asdf١٢٣٤
a2p["asdf١٢٣٤"] // asdf۱۲۳۴

Explaination:

  • var
    persianNumbers = [/۰/g, /۱/g, /۲/g, /۳/g, /۴/g, /۵/g, /۶/g, /۷/g, /۸/g, /۹/g],
    arabicNumbers  = [/٠/g, /١/g, /٢/g, /٣/g, /٤/g, /٥/g, /٦/g, /٧/g, /٨/g, /٩/g],
    fixNumbers = function [str]
    {
      if[typeof str === 'string']
      {
        for[var i=0; i abc[0123456789][0123456789][0123456789]
    
    222949
    console.log[toEnglishDigits["abc[0123456789][٠١٢٣٤٥٦٧٨٩][۰۱۲۳۴۵۶۷۸۹]"]];
    // expected result => abc[0123456789][0123456789][0123456789]
    
    4____51, vì vậy nếu chúng ta loại bỏ sự khác biệt của chúng trong cơ sở, thì kết thúc có thể giống nhau. Vì vậy, chúng ta có thể sử dụng hoạt động bitwise và [&] giữa mã char của họ bằng cách sử dụng charcodeat [] để chỉ ở lại một phần.
    function toEnglishDigits[str] {
    
        // convert persian digits [۰۱۲۳۴۵۶۷۸۹]
        var e = '۰'.charCodeAt[0];
        str = str.replace[/[۰-۹]/g, function[t] {
            return t.charCodeAt[0] - e;
        }];
    
        // convert arabic indic digits [٠١٢٣٤٥٦٧٨٩]
        e = '٠'.charCodeAt[0];
        str = str.replace[/[٠-٩]/g, function[t] {
            return t.charCodeAt[0] - e;
        }];
        return str;
    }
    
    9
    console.log[toEnglishDigits["abc[0123456789][٠١٢٣٤٥٦٧٨٩][۰۱۲۳۴۵۶۷۸۹]"]];
    // expected result => abc[0123456789][0123456789][0123456789]
    
    0
    console.log[toEnglishDigits["abc[0123456789][٠١٢٣٤٥٦٧٨٩][۰۱۲۳۴۵۶۷۸۹]"]];
    // expected result => abc[0123456789][0123456789][0123456789]
    
    1
    console.log[toEnglishDigits["abc[0123456789][٠١٢٣٤٥٦٧٨٩][۰۱۲۳۴۵۶۷۸۹]"]];
    // expected result => abc[0123456789][0123456789][0123456789]
    
    2
    function toEnglishDigits[str] {
    
        // convert persian digits [۰۱۲۳۴۵۶۷۸۹]
        var e = '۰'.charCodeAt[0];
        str = str.replace[/[۰-۹]/g, function[t] {
            return t.charCodeAt[0] - e;
        }];
    
        // convert arabic indic digits [٠١٢٣٤٥٦٧٨٩]
        e = '٠'.charCodeAt[0];
        str = str.replace[/[٠-٩]/g, function[t] {
            return t.charCodeAt[0] - e;
        }];
        return str;
    }
    
    9
    console.log[toEnglishDigits["abc[0123456789][٠١٢٣٤٥٦٧٨٩][۰۱۲۳۴۵۶۷۸۹]"]];
    // expected result => abc[0123456789][0123456789][0123456789]
    
    4
    console.log[toEnglishDigits["abc[0123456789][٠١٢٣٤٥٦٧٨٩][۰۱۲۳۴۵۶۷۸۹]"]];
    // expected result => abc[0123456789][0123456789][0123456789]
    
    1
    , So if we remove the difference of them in base, the end can be same.
    For that we can use Bitwise AND [&] operation between their Char-code by using charCodeAt[] to just the same part stay.

    Explain:

    // x86 [Base 10] --> Binary [Base 2]
    
    '٤'.charCodeAt[0];   // 1636 [Base 10]
    '۴'.charCodeAt[0];   // 1780 [Base 10]
    
    [1636].toString[2];  // 0000000000000000000001100110 0100 [Base 2]
    [1780].toString[2];  // 0000000000000000000001101111 0100 [Base 2]
    [4].toString[2];     // 0000000000000000000000000000 0100 [Base 2]
    
    // We need a         // 0000000000000000000000000000 1111 [Base 2]
    // To And it, for keeping just the 1's
    // 0xf = 15
    [15].toString[2];    // 0000000000000000000000000000 1111 [Base 2]
    
    // So
    [
    1780                 // 0000000000000000000001101111 0100 [Base 2]
    &                    // AND [Operation]
    15                   // 0000000000000000000000000000 1111 [Base 2]
    ]
    ==
    4                    // 0000000000000000000000000000 0100 [Base 2]  
    // ---> true       
    
    // Also              [1636 & 15] == 4     s.replace[/\d/g, d => '۰۱۲۳۴۵۶۷۸۹'[d]]
    const e2a = s => s.replace[/\d/g, d => '٠١٢٣٤٥٦٧٨٩'[d]]
    
    const p2e = s => s.replace[/[۰-۹]/g, d => '۰۱۲۳۴۵۶۷۸۹'.indexOf[d]]
    const a2e = s => s.replace[/[٠-٩]/g, d => '٠١٢٣٤٥٦٧٨٩'.indexOf[d]]
    
    const p2a = s => s.replace[/[۰-۹]/g, d => '٠١٢٣٤٥٦٧٨٩'['۰۱۲۳۴۵۶۷۸۹'.indexOf[d]]]
    const a2p = s => s.replace[/[٠-٩]/g, d => '۰۱۲۳۴۵۶۷۸۹'['٠١٢٣٤٥٦٧٨٩'.indexOf[d]]]
    
    e2p["asdf1234"] // asdf۱۲۳۴
    e2a["asdf1234"] // asdf١٢٣٤
    p2e["asdf۱۲۳۴"] // asdf1234
    a2e["asdf١٢٣٤"] // asdf1234
    p2a["asdf۱۲۳۴"] // asdf١٢٣٤
    a2p["asdf١٢٣٤"] // asdf۱۲۳۴
    
    0

    Đã trả lời ngày 8 tháng 1 lúc 18:58Jan 8 at 18:58

    2

    Nếu chuỗi có thể chứa cả số "tiếng Ả Rập" và "Ba Tư" thì "thay thế" một dòng có thể thực hiện công việc như sau.both "Arabic" and "Persian" numbers then a one-line "replace" can do the job as follows.

    Số lượng Ả Rập và Ba Tư được chuyển đổi thành tương đương tiếng Anh. Văn bản khác vẫn không thay đổi.

    const e2p = s => s.replace[/\d/g, d => '۰۱۲۳۴۵۶۷۸۹'[d]]
    const e2a = s => s.replace[/\d/g, d => '٠١٢٣٤٥٦٧٨٩'[d]]
    
    const p2e = s => s.replace[/[۰-۹]/g, d => '۰۱۲۳۴۵۶۷۸۹'.indexOf[d]]
    const a2e = s => s.replace[/[٠-٩]/g, d => '٠١٢٣٤٥٦٧٨٩'.indexOf[d]]
    
    const p2a = s => s.replace[/[۰-۹]/g, d => '٠١٢٣٤٥٦٧٨٩'['۰۱۲۳۴۵۶۷۸۹'.indexOf[d]]]
    const a2p = s => s.replace[/[٠-٩]/g, d => '۰۱۲۳۴۵۶۷۸۹'['٠١٢٣٤٥٦٧٨٩'.indexOf[d]]]
    
    e2p["asdf1234"] // asdf۱۲۳۴
    e2a["asdf1234"] // asdf١٢٣٤
    p2e["asdf۱۲۳۴"] // asdf1234
    a2e["asdf١٢٣٤"] // asdf1234
    p2a["asdf۱۲۳۴"] // asdf١٢٣٤
    a2p["asdf١٢٣٤"] // asdf۱۲۳۴
    
    1

    Đã trả lời ngày 28 tháng 7 năm 2020 lúc 12:13Jul 28, 2020 at 12:13

    Mohsen Alyafeimohsen AlyafeiMohsen Alyafei

    4.0963 Huy hiệu vàng22 Huy hiệu bạc38 Huy hiệu Đồng3 gold badges22 silver badges38 bronze badges

    3

    Ngắn và dễ dàng!

    const e2p = s => s.replace[/\d/g, d => '۰۱۲۳۴۵۶۷۸۹'[d]]
    const e2a = s => s.replace[/\d/g, d => '٠١٢٣٤٥٦٧٨٩'[d]]
    
    const p2e = s => s.replace[/[۰-۹]/g, d => '۰۱۲۳۴۵۶۷۸۹'.indexOf[d]]
    const a2e = s => s.replace[/[٠-٩]/g, d => '٠١٢٣٤٥٦٧٨٩'.indexOf[d]]
    
    const p2a = s => s.replace[/[۰-۹]/g, d => '٠١٢٣٤٥٦٧٨٩'['۰۱۲۳۴۵۶۷۸۹'.indexOf[d]]]
    const a2p = s => s.replace[/[٠-٩]/g, d => '۰۱۲۳۴۵۶۷۸۹'['٠١٢٣٤٥٦٧٨٩'.indexOf[d]]]
    
    e2p["asdf1234"] // asdf۱۲۳۴
    e2a["asdf1234"] // asdf١٢٣٤
    p2e["asdf۱۲۳۴"] // asdf1234
    a2e["asdf١٢٣٤"] // asdf1234
    p2a["asdf۱۲۳۴"] // asdf١٢٣٤
    a2p["asdf١٢٣٤"] // asdf۱۲۳۴
    
    2

    Hoặc theo cách hiện đại hơn

    const e2p = s => s.replace[/\d/g, d => '۰۱۲۳۴۵۶۷۸۹'[d]]
    const e2a = s => s.replace[/\d/g, d => '٠١٢٣٤٥٦٧٨٩'[d]]
    
    const p2e = s => s.replace[/[۰-۹]/g, d => '۰۱۲۳۴۵۶۷۸۹'.indexOf[d]]
    const a2e = s => s.replace[/[٠-٩]/g, d => '٠١٢٣٤٥٦٧٨٩'.indexOf[d]]
    
    const p2a = s => s.replace[/[۰-۹]/g, d => '٠١٢٣٤٥٦٧٨٩'['۰۱۲۳۴۵۶۷۸۹'.indexOf[d]]]
    const a2p = s => s.replace[/[٠-٩]/g, d => '۰۱۲۳۴۵۶۷۸۹'['٠١٢٣٤٥٦٧٨٩'.indexOf[d]]]
    
    e2p["asdf1234"] // asdf۱۲۳۴
    e2a["asdf1234"] // asdf١٢٣٤
    p2e["asdf۱۲۳۴"] // asdf1234
    a2e["asdf١٢٣٤"] // asdf1234
    p2a["asdf۱۲۳۴"] // asdf١٢٣٤
    a2p["asdf١٢٣٤"] // asdf۱۲۳۴
    
    3

    Đã trả lời ngày 5 tháng 6 năm 2019 lúc 21:05Jun 5, 2019 at 21:05

    AhmadahmadAhmad

    5.2838 Huy hiệu vàng42 Huy hiệu bạc55 Huy hiệu Đồng8 gold badges42 silver badges55 bronze badges

    1

    Bạn có thể làm một cái gì đó như thế này sử dụng chỉ mục của số trong chuỗi để thực hiện chuyển đổi:

    const e2p = s => s.replace[/\d/g, d => '۰۱۲۳۴۵۶۷۸۹'[d]]
    const e2a = s => s.replace[/\d/g, d => '٠١٢٣٤٥٦٧٨٩'[d]]
    
    const p2e = s => s.replace[/[۰-۹]/g, d => '۰۱۲۳۴۵۶۷۸۹'.indexOf[d]]
    const a2e = s => s.replace[/[٠-٩]/g, d => '٠١٢٣٤٥٦٧٨٩'.indexOf[d]]
    
    const p2a = s => s.replace[/[۰-۹]/g, d => '٠١٢٣٤٥٦٧٨٩'['۰۱۲۳۴۵۶۷۸۹'.indexOf[d]]]
    const a2p = s => s.replace[/[٠-٩]/g, d => '۰۱۲۳۴۵۶۷۸۹'['٠١٢٣٤٥٦٧٨٩'.indexOf[d]]]
    
    e2p["asdf1234"] // asdf۱۲۳۴
    e2a["asdf1234"] // asdf١٢٣٤
    p2e["asdf۱۲۳۴"] // asdf1234
    a2e["asdf١٢٣٤"] // asdf1234
    p2a["asdf۱۲۳۴"] // asdf١٢٣٤
    a2p["asdf١٢٣٤"] // asdf۱۲۳۴
    
    4

    Hoặc bản đồ bằng cách sử dụng một đối tượng như thế này:

    const e2p = s => s.replace[/\d/g, d => '۰۱۲۳۴۵۶۷۸۹'[d]]
    const e2a = s => s.replace[/\d/g, d => '٠١٢٣٤٥٦٧٨٩'[d]]
    
    const p2e = s => s.replace[/[۰-۹]/g, d => '۰۱۲۳۴۵۶۷۸۹'.indexOf[d]]
    const a2e = s => s.replace[/[٠-٩]/g, d => '٠١٢٣٤٥٦٧٨٩'.indexOf[d]]
    
    const p2a = s => s.replace[/[۰-۹]/g, d => '٠١٢٣٤٥٦٧٨٩'['۰۱۲۳۴۵۶۷۸۹'.indexOf[d]]]
    const a2p = s => s.replace[/[٠-٩]/g, d => '۰۱۲۳۴۵۶۷۸۹'['٠١٢٣٤٥٦٧٨٩'.indexOf[d]]]
    
    e2p["asdf1234"] // asdf۱۲۳۴
    e2a["asdf1234"] // asdf١٢٣٤
    p2e["asdf۱۲۳۴"] // asdf1234
    a2e["asdf١٢٣٤"] // asdf1234
    p2a["asdf۱۲۳۴"] // asdf١٢٣٤
    a2p["asdf١٢٣٤"] // asdf۱۲۳۴
    
    5

    Đã trả lời ngày 15 tháng 7 năm 2015 lúc 20:03Jul 15, 2015 at 20:03

    ED lá phiếu bỏ phiếuEd Ballot

    3,3351 Huy hiệu vàng16 Huy hiệu bạc24 Huy hiệu đồng1 gold badge16 silver badges24 bronze badges

    2

    Biến số bất kỳ số tiếng Ba Tư hoặc tiếng Ả Rập [hoặc hỗn hợp] thành số "tiếng Anh" [chữ số tiếng Hindu Hindu]

    const e2p = s => s.replace[/\d/g, d => '۰۱۲۳۴۵۶۷۸۹'[d]]
    const e2a = s => s.replace[/\d/g, d => '٠١٢٣٤٥٦٧٨٩'[d]]
    
    const p2e = s => s.replace[/[۰-۹]/g, d => '۰۱۲۳۴۵۶۷۸۹'.indexOf[d]]
    const a2e = s => s.replace[/[٠-٩]/g, d => '٠١٢٣٤٥٦٧٨٩'.indexOf[d]]
    
    const p2a = s => s.replace[/[۰-۹]/g, d => '٠١٢٣٤٥٦٧٨٩'['۰۱۲۳۴۵۶۷۸۹'.indexOf[d]]]
    const a2p = s => s.replace[/[٠-٩]/g, d => '۰۱۲۳۴۵۶۷۸۹'['٠١٢٣٤٥٦٧٨٩'.indexOf[d]]]
    
    e2p["asdf1234"] // asdf۱۲۳۴
    e2a["asdf1234"] // asdf١٢٣٤
    p2e["asdf۱۲۳۴"] // asdf1234
    a2e["asdf١٢٣٤"] // asdf1234
    p2a["asdf۱۲۳۴"] // asdf١٢٣٤
    a2p["asdf١٢٣٤"] // asdf۱۲۳۴
    
    6
    const e2p = s => s.replace[/\d/g, d => '۰۱۲۳۴۵۶۷۸۹'[d]]
    const e2a = s => s.replace[/\d/g, d => '٠١٢٣٤٥٦٧٨٩'[d]]
    
    const p2e = s => s.replace[/[۰-۹]/g, d => '۰۱۲۳۴۵۶۷۸۹'.indexOf[d]]
    const a2e = s => s.replace[/[٠-٩]/g, d => '٠١٢٣٤٥٦٧٨٩'.indexOf[d]]
    
    const p2a = s => s.replace[/[۰-۹]/g, d => '٠١٢٣٤٥٦٧٨٩'['۰۱۲۳۴۵۶۷۸۹'.indexOf[d]]]
    const a2p = s => s.replace[/[٠-٩]/g, d => '۰۱۲۳۴۵۶۷۸۹'['٠١٢٣٤٥٦٧٨٩'.indexOf[d]]]
    
    e2p["asdf1234"] // asdf۱۲۳۴
    e2a["asdf1234"] // asdf١٢٣٤
    p2e["asdf۱۲۳۴"] // asdf1234
    a2e["asdf١٢٣٤"] // asdf1234
    p2a["asdf۱۲۳۴"] // asdf١٢٣٤
    a2p["asdf١٢٣٤"] // asdf۱۲۳۴
    
    7
    const e2p = s => s.replace[/\d/g, d => '۰۱۲۳۴۵۶۷۸۹'[d]]
    const e2a = s => s.replace[/\d/g, d => '٠١٢٣٤٥٦٧٨٩'[d]]
    
    const p2e = s => s.replace[/[۰-۹]/g, d => '۰۱۲۳۴۵۶۷۸۹'.indexOf[d]]
    const a2e = s => s.replace[/[٠-٩]/g, d => '٠١٢٣٤٥٦٧٨٩'.indexOf[d]]
    
    const p2a = s => s.replace[/[۰-۹]/g, d => '٠١٢٣٤٥٦٧٨٩'['۰۱۲۳۴۵۶۷۸۹'.indexOf[d]]]
    const a2p = s => s.replace[/[٠-٩]/g, d => '۰۱۲۳۴۵۶۷۸۹'['٠١٢٣٤٥٦٧٨٩'.indexOf[d]]]
    
    e2p["asdf1234"] // asdf۱۲۳۴
    e2a["asdf1234"] // asdf١٢٣٤
    p2e["asdf۱۲۳۴"] // asdf1234
    a2e["asdf١٢٣٤"] // asdf1234
    p2a["asdf۱۲۳۴"] // asdf١٢٣٤
    a2p["asdf١٢٣٤"] // asdf۱۲۳۴
    
    8

    Đã trả lời ngày 14 tháng 5 năm 2018 lúc 10:38May 14, 2018 at 10:38

    vsyncvsyncvsync

    109K54 Huy hiệu vàng287 Huy hiệu bạc372 Huy hiệu đồng54 gold badges287 silver badges372 bronze badges

    const e2p = s => s.replace[/\d/g, d => '۰۱۲۳۴۵۶۷۸۹'[d]]
    const e2a = s => s.replace[/\d/g, d => '٠١٢٣٤٥٦٧٨٩'[d]]
    
    const p2e = s => s.replace[/[۰-۹]/g, d => '۰۱۲۳۴۵۶۷۸۹'.indexOf[d]]
    const a2e = s => s.replace[/[٠-٩]/g, d => '٠١٢٣٤٥٦٧٨٩'.indexOf[d]]
    
    const p2a = s => s.replace[/[۰-۹]/g, d => '٠١٢٣٤٥٦٧٨٩'['۰۱۲۳۴۵۶۷۸۹'.indexOf[d]]]
    const a2p = s => s.replace[/[٠-٩]/g, d => '۰۱۲۳۴۵۶۷۸۹'['٠١٢٣٤٥٦٧٨٩'.indexOf[d]]]
    
    e2p["asdf1234"] // asdf۱۲۳۴
    e2a["asdf1234"] // asdf١٢٣٤
    p2e["asdf۱۲۳۴"] // asdf1234
    a2e["asdf١٢٣٤"] // asdf1234
    p2a["asdf۱۲۳۴"] // asdf١٢٣٤
    a2p["asdf١٢٣٤"] // asdf۱۲۳۴
    
    9

    Đã trả lời ngày 26 tháng 7 năm 2020 lúc 13:58Jul 26, 2020 at 13:58

    1

    Bạn có thể sử dụng thư viện công cụ Ba Tư mới, một thư viện JavaScript tuyệt vời để đối phó với các từ và số tiếng Ba Tư. Đây là một mẫu cho nhiệm vụ bạn đã yêu cầu:

    var
    persianNumbers = [/۰/g, /۱/g, /۲/g, /۳/g, /۴/g, /۵/g, /۶/g, /۷/g, /۸/g, /۹/g],
    arabicNumbers  = [/٠/g, /١/g, /٢/g, /٣/g, /٤/g, /٥/g, /٦/g, /٧/g, /٨/g, /٩/g],
    fixNumbers = function [str]
    {
      if[typeof str === 'string']
      {
        for[var i=0; i

Chủ Đề