【问题标题】:Convert complicates string into integer?将复杂的字符串转换为整数?
【发布时间】:2013-01-21 13:27:08
【问题描述】:

我已使用 innerHTML 方法将字符串检索到变量中。字符串是:

£ 125.00
<!-- End: pagecomponent/pricesplit -->

我只想要 125.00 部分。是否可以使用 parseInt() 方法将其转换为整数?或者,我可以做些什么来提取 125.00 部分?

谢谢

【问题讨论】:

  • '£ 125.00'.match(/\d+/ig);
  • 不,你想使用parseFloat
  • 我添加了说明为什么你不能使用parseInt 以及如何只提取数值。

标签: javascript parsing parseint


【解决方案1】:

您可能希望使用正则表达式删除除数字和句点之外的任何内容,然后对剩余的字符串运行 parseInt

parseInt(yourString.replace(/[^\d.]/g, ''), 10);

测试正则表达式here。这是一个细分:

/.../ 只是用于包装正则表达式的语法。忽略这些。

[...] 创建一个字符类。

^ 放在字符类的开头时,它会否定里面的所有内容。

\d 任意数字

. 一个文字句点。它不需要在字符类内部转义 - 在外部它意味着“任何字符”并且需要转义。

所以/[^\d.]/ 的意思是“匹配任何不是数字或句点的东西”,然后用空字符串替换它。

如果您的号码可能包含小数点后的有效数字,例如125.50,您应该使用parseFloat 而不是parseInt

【讨论】:

  • 我认为这不是一个可靠的匹配 :-) 想想价格中没有数字,或者没有小数的价格......
  • @Bergi 没有小数的价格可以正常工作。数字之外的数字会导致问题,OP 必须知道他的字符串的格式,看看他是否需要解决这个问题。根据this site,点不在\D 中。 "\d[0-9] 的缩写。"
  • 啊,你已经把[\D.] 改成了[^\d.] - 我也应该看看你的文字:-)
  • @Bergi yes [\D.] 不起作用,因为 \D 正在破坏 or 子句:)
  • 感谢大家的回答,我以前什至不知道 javascript 正则表达式。这确实确实符合我的需要,但是我仍然需要了解表达式中所有 \ 和 / 的含义
【解决方案2】:

您可以使用正则表达式获取值。这是一个例子:

var str = '£&nbsp;125.00<!-- End: pagecomponent/pricesplit -->';
parseInt((/\d+/).exec(str)[0], 10);

或者如果你也想得到零:

(/\d+\.\d+|\d+/g).exec(str)[0]

您无法直接使用parseInt 获取它,因为当字符串不以数字开头时parseInt 不起作用。

【讨论】:

  • 我相信只允许数字会去掉.,给你12500而不是125
猜你喜欢
  • 2019-11-26
  • 1970-01-01
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
  • 2013-10-06
  • 2011-12-27
  • 2011-07-01
相关资源
最近更新 更多