首页 > 解决方案 > 如何验证我的 $ 货币正则表达式仅介于 0-9999.99 之间的数字?

问题描述

我写了我的正则表达式

^(\d{1,4}|\d{0,4}\.\d{1,2})$

它只接受 0-9999.99 的值,所以接受的值是:0、999.99、9999、999.9 但现在我想在开头或结尾也接受一个“$”,所以 $9999、9999$、$9999.00、9999.9 $ 也应该被接受。

我可以就如何调整我当前的正则表达式获得一些帮助吗?

标签: regex

解决方案


要在两端都不允许美元符号,并且如果支持前瞻,您可以使用在开头和结尾排除美元符号的模式开始^(?!\$.*\$$)

对于匹配,您可以在开头和结尾设置可选的美元符号以匹配所有 3 个变体。

^(?!\$.*\$$)\$?\s*(?:\d{1,4}|\d{0,4}\.\d{1,2})\s*\$?$

更新后的模式匹配:

  • ^字符串的开头
  • (?!\$.*\$$)否定前瞻断言不是以开头和结尾的字符串$
  • \$?\s*匹配可选$和可选的空白字符
  • (?:\d{1,4}|\d{0,4}\.\d{1,2})匹配 1-4 位数字,或 0-4 位数字和一个点后跟 1-2 位数字
  • \s*\$?匹配可选的空白字符和一个可选的$
  • $字符串结束

正则表达式演示

如果不支持前瞻,您可以使用替换来匹配前面带有可选美元符号的模式以匹配 2 个变体,或者匹配仅以匹配第 3 个变体的美元符号结尾的模式。

^(?:\$?\s*(?:\d{1,4}|\d{0,4}\.\d{1,2})\s*|(?:\d{1,4}|\d{0,4}\.\d{1,2})\s*\$)$

查看另一个正则表达式演示


推荐阅读