首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RegEx美元验证

问RegEx美元验证
EN

Stack Overflow用户
提问于 2015-09-18 15:57:12
回答 2查看 183关注 0票数 3

我看过几篇关于用RegEx验证美元金额的帖子,我非常接近我需要的内容,但有一个问题。这是我到目前为止所拥有的

代码语言:javascript
复制
^[\+\-]?\$?(\d*|\d{1,3}(,\d{3})*)(\.[0-9]+)?$

它所取得的成就如下:

  • 不允许前导尾随空间
  • 正面/负面开头是可选的。
  • 美元符号是可选的
  • 逗号是可选的,但如果它们存在,则需要在0后面加上3位数字,并在前面加上1到3位数字。
  • 小数点是可选的,但如果存在: 1)小数点之前不需要任何数字)小数点之后需要1或更多位数

所有这些条件都满足了,但我遇到的问题是,如果用户只输入一个+、-或$,那么表达式将返回true。我要找的是,如果$+-存在的话,它们必须后面跟着一些东西。

我知道问题是小数之前的数字是可选的,小数段本身也是可选的。但我希望允许输入.25 w/o,必须强制将其输入为0.25。

我试着在可选的美元符号[^$]之后添加行尾\$?,认为+-$不能后面跟着行尾,但这似乎不起作用。

我很感激你的帮助!

-Shawn

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-18 16:18:13

您需要使用以下正则表达式

  1. \d*导致了问题,所以请使用“向前看”断言。它确认在符号之后至少会有一个字符。
  2. 您需要转义.,而不是使用\.,否则它将匹配任何字符。

Regex :

代码语言:javascript
复制
^[+-]?\$?(?=.)(?:\d*|\d{1,3}(?:,\d{3})*)(?:\.[0-9]+)?$

Regex解释

​

​

票数 1
EN

Stack Overflow用户

发布于 2015-09-18 16:18:46

我认为问题在于\d*,在:

代码语言:javascript
复制
^[\+\-]?\$?(\d*|\d{1,3}(,\d{3})*)(\.[0-9]+)?$
              ^here

用+替换它似乎可以确保输入至少一个数字。

代码语言:javascript
复制
^[\+\-]?\$?(\d+|\d{1,3}(,\d{3})*)(\.[0-9]+)?$

这可以确保+、-或$后面至少有一个数字。

演示

一个潜在的问题是$.25不匹配,您可以使用以下方法来解决这个问题:

代码语言:javascript
复制
^[\+\-]?\$?((\d+|\d{1,3}(,\d{3})*)(\.[0-9]+)?|(\.[0-9]+))$

演示

这个正则表达式可能适用于所有的正则表达式引擎。如果引擎支持前瞻性,您可以使它更加优雅。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32656324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档