2012-08-16 79 views
4

如何將單詞轉換爲JavaScript數字?Javascript:將數字轉換爲數字

例如:「從現在開始的十九天」將變爲「從現在開始的十九天」。

我很好用jQuery或其他庫 - 希望如果它不是jQuery的小型一個。

+3

聽起來像某人有明天的求職面試:) – marteljn 2012-08-16 02:54:33

+3

或作業分配:-) – 2012-08-16 02:55:30

+0

標點符號如何,例如,「二十二」與「二十二」。關於「我喜歡吃餅乾:我吃了一百二十個,以後留下來」。 (這顯然應該是「......我吃了100和20個......」,而不是「......我吃了120個剩下的......」)。我說的是,如果不是不可能的以確定字符串的哪些部分形成離散數字。除非有一個非常有限的數字範圍才能確定,例如,只是零到二十或類似的東西...... – nnnnnn 2012-08-16 03:39:53

回答

16

這裏是我的JavaScript更換@格雷格Hewgill的Python模塊的,減去從代碼底部的測試:

var Small = { 
    'zero': 0, 
    'one': 1, 
    'two': 2, 
    'three': 3, 
    'four': 4, 
    'five': 5, 
    'six': 6, 
    'seven': 7, 
    'eight': 8, 
    'nine': 9, 
    'ten': 10, 
    'eleven': 11, 
    'twelve': 12, 
    'thirteen': 13, 
    'fourteen': 14, 
    'fifteen': 15, 
    'sixteen': 16, 
    'seventeen': 17, 
    'eighteen': 18, 
    'nineteen': 19, 
    'twenty': 20, 
    'thirty': 30, 
    'forty': 40, 
    'fifty': 50, 
    'sixty': 60, 
    'seventy': 70, 
    'eighty': 80, 
    'ninety': 90 
}; 

var Magnitude = { 
    'thousand':  1000, 
    'million':  1000000, 
    'billion':  1000000000, 
    'trillion':  1000000000000, 
    'quadrillion': 1000000000000000, 
    'quintillion': 1000000000000000000, 
    'sextillion': 1000000000000000000000, 
    'septillion': 1000000000000000000000000, 
    'octillion': 1000000000000000000000000000, 
    'nonillion': 1000000000000000000000000000000, 
    'decillion': 1000000000000000000000000000000000, 
}; 

var a, n, g; 

function text2num(s) { 
    a = s.toString().split(/[\s-]+/); 
    n = 0; 
    g = 0; 
    a.forEach(feach); 
    return n + g; 
} 

function feach(w) { 
    var x = Small[w]; 
    if (x != null) { 
     g = g + x; 
    } 
    else if (w == "hundred") { 
     g = g * 100; 
    } 
    else { 
     x = Magnitude[w]; 
     if (x != null) { 
      n = n + g * x 
      g = 0; 
     } 
     else { 
      alert("Unknown number: "+w); 
     } 
    } 
} 

我被掛了一下對正則表達式,ING和換每個錯誤IE,但在這裏。如果我能這樣說自己,那麼我不能這樣做,從Python到JavaScript的轉換相當體面。它需要一些工作 - 「一百二十」不會奏效 - 但現在已經足夠了。當然,感謝@Greg Hewgill的原創,用Python編寫。

我特此在公共領域授權,就像我在StackOverflow上發佈的所有代碼一樣。

+0

我剛剛注意到「sextillion」在我的代碼中拼寫錯誤。我在github上改了它。 – 2012-08-19 20:05:40

+1

if(w ==「and」){return} – spencercooly 2014-05-10 19:38:02

+0

如果您有多個數字的文本(例如「十九天到我想要的百萬」),則這不起作用; – 2014-12-03 17:08:24

3

這是一個(真的)舊線程,但如果別人絆跨我已經通過上面的答案靈感節點模塊做上述所有這些還可以:

  • 手柄破折號和逗號
  • 匹配多個號碼中的字符串
  • 模糊匹配的數量的話
  • 解釋小數位數

以下是鏈接:Words To Numbers

+0

我無法在我的機器上安裝此包... – 2017-10-12 06:24:25

+0

它的工作原理我向你保證 - 你可以在這裏創建一張票嗎? https://github.com/finnfiddle/words-to-numbers/issues – 2017-10-13 13:28:05