【问题标题】:Validation of price in Javascript using Regex使用正则表达式在 Javascript 中验证价格
【发布时间】:2015-03-19 14:48:43
【问题描述】:

我需要检查一个字符串是否为有效价格。在某些语言环境中,“.”与“,”互换,分隔符可以是千位或数百位。 例如: 有效:

1234  
1,234
1.234  
1,23,334
1.23.334 
1,23,334.00
1.23.334,00

无效:

1,23...233
1,,23
etc

我使用的正则表达式是

/(\d+(?:[\.,](?![\.,])\d+)*)/g

但这给了我两个“1,23...233”的匹配项,即“1,23”和“233”作为匹配项,我不想为此返回任何匹配项。 Here 是我一直在研究的正则表达式。我真正想做的事,只要有“。”或 "," 下一个字符不应是 "."或“,”,它应该是一个数字。

【问题讨论】:

  • 在我看来 !/\.\.|,,/.test(string) 应该可以完成这项工作。如果您还想检查其他所有内容是否为数字,则:!/\.\.|,,|\D/.test(string)。如果找到任何模式,则表达式返回 false,否则返回 true。
  • 你应该在这里使用插件而不是正则表达式。
  • @anubhava ,这似乎很好检查。如果我们需要从中选择价格怎么办,比如说“123,456.00 美元”

标签: javascript regex lookahead negative-lookahead


【解决方案1】:

你可以简单地做到这一点。

^\d+(?:[.,]\d+)*$

试试这个。查看演示。

https://regex101.com/r/tX2bH4/61

var re = /^\d+(?:[.,]\d+)*$/gm;
var str = '1234\n1,234\n1.234\n1,23,334\n1.23.334\n1,23,334.00\n1.23.334,00\n1,23...233\n1,23.';
var m;

while ((m = re.exec(str)) != null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
// View your result using the m-variable.
// eg m[0] etc.
}

【讨论】:

  • @rahmanisback 可以轻松修复 (?!0[.,]) 将其放在开始
【解决方案2】:

好像你想要这样的东西,

^\d+(?:\.\d+)?(?:,\d+(?:\.\d+)?)*$

DEMO

^(?!.*(,,|,\.|\.,|\.\.))[\d.,]+$

开头的负前瞻断言字符串不会包含连续的逗号或点或点和逗号。

DEMO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 2020-08-12
    • 1970-01-01
    相关资源
    最近更新 更多