2012-08-16 82 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