使用正则表达式验证数字和货币

validate number and currency with regex

我正在研究正则表达式,但不知道下一步该做什么。 这些是我的正则表达式:
1) "^-?\d{1,3}(?:\.\d{3})*(?:,\d+)?\s$";
2) "^-?\d{1,3}(?:\.\d{3})*(?:,\d+)?\s\€$"
3) "[0-9.,]*"
4) "[0-9.,€]*"

这些正则表达式检查货币字符串或数字。 每个人的例子
1) 123.456,99
2) 123.456,99 欧元
3) 12,19
4) 12,19 欧元

每个正则表达式都适用于相关示例。 是否可以将所有这些正则表达式合并为一个? 以及我怎样才能使这个正则表达式灵活地适应该字符串中任何位置的空格。

提前谢谢

萨米

这应该可以解决问题

\d{1,3}(?:.|,)+€?

而对于 java 它应该是 "\d{1,3}(?:.|,)+€?"

我强烈推荐 http://regexr.com 以满足您对正则表达式的所有需求。他们有很棒的 "cheatsheet" 和不错的测试环境

您可以使用 ^-?(\d{1,3}\s*?([.,]|$|\s)\s*?)+€?$

  • ^-?(\d{1,3}\s*?([.,]|$|\s)\s*?)+€?$ : ^

    开头
    • (\d{1,3}\s*?([.,]|$|\s)\s*?)+ 匹配一对或多对数字,由 .,
    • 分隔
    • \d{1,3}\s*?匹配1到3之间的数字,尽量少匹配spaces
    • ([.,]|$|\s)\s*? ., 的零个或一个匹配项或结束或 space ,\s*? 零个或多个 spaces
  • €?$ 个字符的零个或一个匹配,$ 匹配结束

Java Demo