【问题标题】:javascript regex for whole and decimal numbers (money)整数和十进制数(钱)的javascript正则表达式
【发布时间】:2016-03-04 19:59:13
【问题描述】:

试图编写一个 javascript 正则表达式来强制用户在整数后输入小数,似乎很多人都不想这样做,因为我的搜索没有产生任何适合我需要的结果。

Match: 2.00 20.00 200.00 1.73 0.10

No Match: .2 .20 . 1 10 1.0 0.1 1.

这是我目前拥有的:

var regexp=/^[0-9]{1,}\.{1}[0-9]{2}$/;

简而言之,用户必须输入 X.XX 格式的钱。不允许只使用一个整数。

我将不胜感激任何帮助并教授任何人在完成这项工作时必须提供的见解。

编辑:

代码如下:

var notempty=/[a-zA-Z0-9\.\$]/g;
var money=/^[0-9]{1,}\.{1}[0-9]{2}$/;

if ( (notempty.test(document.getElementById('numbers').value)) && (!money.test(document.getElementById('numbers').value)) )
{alert('Wrong format');}

【问题讨论】:

  • /^\d+\.\d{2}$/ 怎么样? - regexr.com/3cak4
  • @JoshCrozier 请注意,这也将允许0003.01,这可能不是 OP 想要的。
  • 这和我已经拥有的一样,只是写法不同,不,它不起作用。 “1”返回真,尽管“10”不返回。 “1”需要写成“1.00”才能匹配。
  • @Bob 与您的正则表达式“1”对我返回 false。
  • 你的方法怎么行不通?举一些例子,因为所有的 No Match 项目都不匹配,而所有的 Match 项目都匹配。

标签: javascript regex decimal currency


【解决方案1】:

您的初始正则表达式是正确的,问题实际上是您的notempty 检查如果值为false 可以短路条件。例如,如果您的字符不是字母、数字、美元符号或句点/[a-zA-Z0-9\.\$]/,它将评估false 并忽略&& 之后的项目,因为这些值无关紧要,因为false && [any conditions] = false .例如输入值为"+":

if ( false && ... )
    // invalid format [the expression was false, so this isn't ran]

由于第一个条件是false,整个表达式变为假,导致不正确的"correct format"。在这种情况下无论如何都不需要“空检查”,您可以简单地拥有:

if (money.test(document.getElementById('numbers').value) {
    // valid format
} else {
    // invalid format
}

正如@JostCrozier 所说,您的表达式可以简化为:/^\d+\.\d{2}$/,这在功能上是等效的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多