【问题标题】:Regex for Range $5,000 - $1,000,000 (with commas and dollar sign optional)范围 $5,000 - $1,000,000 的正则表达式(逗号和美元符号可选)
【发布时间】:2023-03-21 19:19:01
【问题描述】:

我需要帮助创建一个范围为 4,000-1,000,000 的正则表达式,其中逗号和美元符号对用户是可选的。

我正在尝试使用带有正则表达式或自定义验证器的 asp.net 对部门预算的验证进行注释,该验证器允许可选的美元符号和逗号,范围从 $5000.00 到 $1,000,000

^\$?([5-9][0-9]{3,5}|1000000)$

不幸的是,这没有用,这是我想出的,任何帮助将不胜感激!

【问题讨论】:

  • 通常“可选”会转化为 1,?000,?000 之类的东西。
  • @tadman 是的,我知道,而且我必须这样做 \,?但问题是弄清楚如何做完整的正则表达式。我不精通,只做过几次。
  • , 不是特殊字符,因此不需要反斜杠。你为什么使用正则表达式来匹配这个?您是否需要将逗号放在正确的位置,还是1,000,00 仍然有效?
  • @tadman 有人要求,是的,因为它是钱。所以它需要是 5,000 - 1,000,000 美元,货币符号和逗号是可选的。但是没有 1,000,00 是不正确的。 10,000 是它的格式。与货币通常如何将 , 用于现金一样。这取决于逗号所在的 0 的数量。
  • “通常”是一个非常主观的东西,因为世界上每个国家都有自己的古怪标准。在某些地方,“3,99 美元”并不是不可能的。你能给出几个好的输入和应该拒绝的坏输入的例子吗?从您的简短描述中不清楚这必须有多强大。

标签: asp.net regex


【解决方案1】:
^\$?(?:[5-9],?\d{3}|[1-9]\d{1,2},?\d{3}|1,000,000|1000000)$

【讨论】:

  • 匹配1,000000
  • 我相信如果你想强制与逗号用法保持一致,它会是:^\$?([5-9],?\d{3}|\d{2,3}?, ?\d{3}|1,000,000|1000000))$
  • 现在 ^\$?([5-9],?\d{3}|\d{2,3}?,?\d{3}|1,000,000|1000000))$或 ^\$?(?:[5-9],?\d{3}|[1-9]\d{1,2},?\d{3}|1,000,000|1000000)$ 效果更好?
  • 你想要 ^(?:[5-9],?\d{3}|[1-9]\d{1,2},?\d{3}|1,000,000|1000000 )$,这个答案匹配:000,000
【解决方案2】:

绝对是一个可靠的选择,但如果你注意到结尾,你可以用一种更简单的方法来做,就像下面的第二个,?使其长度更短。

^(?:5,?\d{3}|[6-9],?\d{3}|[1-9]\d{1,2},?\d{3}|1,000,000|1000000)$

VS

^\$?([5-9],?\d{3}|\d{2,3}?,?\d{3}|(?:1,?000,?000))$

第二个更干净,据我所知完全有效。

【讨论】:

  • 你可以结合这些5,?\d{3}|[6-9],?\d{3}
【解决方案3】:

编辑:添加可选的美元符号\$?

^(?:[5-9],?\d{3}|[1-9]\d{1,2},?\d{3}|1,000,000|1000000)$

展开

 ^ 
 (?:
      [5-9] ,? \d{3} 
   |  [1-9] \d{1,2} ,? \d{3} 
   |  1, 000 , 000
   |  1  000   000
 )
 $

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 2012-03-13
    • 1970-01-01
    • 2019-05-11
    • 2020-03-08
    相关资源
    最近更新 更多