【问题标题】:Expand regex for money checking the amount扩展正则表达式以检查金额
【发布时间】:2014-01-09 20:09:36
【问题描述】:

我有一个正则表达式来检查 HTML 输入的值,如果它符合正确的金钱形式:

^(?=\(.*\)|[^()]*$)\(?\d{1,3}(,?\d{3})?(\.\d\d?)?\)?\€?$

现在我需要扩展正则表达式,以便它还检查金额是否大于 0.40 欧元。

允许的例子:

25€
25
25.00
25.00€
25,00
25,00€
0.99€
0.99
0,99
0,99€

不允许:

0.39
0.39€
0,39
0,39€

【问题讨论】:

  • 验证格式后,您可以安全地将其转换为数值并进行简单比较(或在规则更改时进行更复杂的比较)。
  • 策略是检查是0[.][4-9]还是[1-9]\d*[.]
  • 恐怕0,99 与您的正则表达式不匹配。

标签: html regex input currency


【解决方案1】:

对我来说,您发布的模式会导致错误的结果 (see here),因为并非所有允许的输入都匹配。

假设您正在使用 JS,这里还有一个您可能会使用的正则表达式,其中包括对 > 0.4 的检查:

^(?:(?:[1-9][0-9]*(?:(?:.|,)\d{2})?)|(?:0(?:(?:.|,)(?:4[1-9]|[5-9]\d))))€?$

Debuggex Demo
regex101 Demo

不包括 0.40,因为我将您的 bigger than 0.40€ 解释为 > 0.4

如果你的意思是>= 0.4,你可以使用

^(?:(?:[1-9][0-9]*(?:(?:.|,)\d{2})?)|(?:0(?:(?:.|,)[4-9]\d)))€?$

【讨论】:

  • [4-9][1-9] 与 0.90 美分不匹配,您的意思可能是 [4-9]\d
  • @cDima 谢谢!你是对的,它不会匹配任何带有尾随零的东西。但我将大于0.40解释为> 0.4,所以不包括0.40。我会将这两个选项都添加到我的答案中......
  • 对不起,但我的例子不是很准确......所以它需要允许所有超过 0.40 欧元的货币价值,所以你的不允许 100 欧元或 1000 欧元或其他许多金额。
  • @user3179168 没问题,只是对第一个字符组添加了另一个限制,现在它允许所有高于 0.4 的值
  • 哦,是的!非常感谢。如果它在我的 html 输入元素中可以正常工作,我会在家里尝试一下。
【解决方案2】:

这个对我有用,匹配所需的字符串。

/^(\d{1,3}([,\.][4-9]\d)?|([1-9]{1,3}([,\.]\d\d)?))\€?$/gm

http://refiddle.com/h2f

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    • 2016-09-26
    • 2011-07-06
    • 2022-08-18
    • 1970-01-01
    相关资源
    最近更新 更多