Regex/Javascript函数将价格存储为基于美分的数字
Regex/Javascript function to store prices as cent-based numbers
Regex是那些你认为你有一个不错的解决方案的领域之一,直到你一开始就没有考虑到的问题出现。
我正试图从一个字符串中获取价格,比如:
US$1234.56
$12
$12.34usd
$0.56
.56 dollars
并将其转换为:
123456
1200
1234
56
56
分别。这样,它们就可以作为Numbers
存储在我的数据库中,用于索引目的,所以我将值存储为美分。
目前我正在用regex:做这件事
var justPrice = fullPrice.replace(/[^0-9]/g, "");
这是有效的,但不考虑领先的0
,也不适用于使$12
==1200
(而不仅仅是12
,它将是12美分)。
我假设在vanilla regex中没有办法实现这个逻辑,所以在这里使用一些javascript是可以的。实现上述结果的最佳方法是什么?
我的解决方案是从任何小数位数的字符串中获取值,然后将字符串转换为数字并乘以100。
var stringPrice = fullPrice.replace(/[^0-9'.]/g, "");
var justPrice = Number(stringPrice) * 100;
也许我在这里遗漏了一些东西,但我认为在这种情况下,使用RegEx可能不是最好的主意。你可以试试这样的东西:
var priceParts = fullPrice.split('.'), justPrice = 0;
if (priceParts.length > 1) {
if (priceParts[0] !== '' && priceParts[1] !== '') {
justPrice = priceParts[0].replace(/'D/, '') * 100
+ priceParts[1].replace(/'D/, '');
} else if (priceParts[0] !== '') {
justPrice = priceParts[0].replace(/'D/, '') * 100;
} else if (priceParts[1] !== '') {
justPrice = priceParts[1].replace(/'D/, '');
}
} else {
justPrice = priceParts[0].replace(/'D/, '') * 100;
}
相关文章:
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- Java脚本插件,用于将数字转换为特定于区域性的货币格式,并将具有特定货币格式的非格式化数字转换为普通数字
- 货币过滤器是否仅适用于使用 $scope.$eval() 的数字
- CKEDITOR-将粗体应用于包含数字的编号列表
- 将函数应用于填充有数字的对象
- Javascript Regex只用于数字,不用于空格
- lodash-sortby,如何将数字排序晚于字母
- 应用于数字类型的 ToString
- 捕获早于onChange的输入,最好只捕获数字
- toExponential()仅适用于具有有效小数的大数字
- 将数学应用于字符串中的所有数字
- javascript中的Y-Combinator factorial适用于数字,而不适用于Church数字
- toString只适用于括号或非文字数字
- 使数字相对于圆点居中
- 试图找到如果一个数字存在于我的数组通过输入
- 如何将表达式仅应用于数字而不是字符串
- 从URL加载变量,仅适用于数字
- 如何在不事先知道字符串中所有数字的具体位置的情况下,将货币或十进制格式应用于字符串中的所有数字
- Wrapall 适用于数字,但不适用于变量
- 检查数字是否存在于字符串的特定位置