【问题标题】:Regex for numeric value that could contain comma & dots可能包含逗号和点的数值的正则表达式
【发布时间】:2021-10-31 17:09:50
【问题描述】:

我一直在尝试但没有成功 我需要一个正则表达式来验证可能包含点和逗号的数字, 数字应该是正数,并且逗号后最多应该有两个数字

有效的情况是:

1000 - valid
1,000 - valid
1,000.22 - valid


-2 not valid
1,000.233 not valid
0 not valid
1.00,22 - not valid

语言是javascript

【问题讨论】:

  • 我想你的意思是在 dot 之后最多应该有两个数字?

标签: regex validation numeric


【解决方案1】:

我认为这个正则表达式应该可以解决问题:

[1-9][\d,]*(\.\d{1,2})?

[1-9] - 匹配开头1到9之间的一个字符(必须不匹配0)

[\d,]* - 匹配零个或多个数字或逗号

(\.\d{1,2})? - 零个或一组点和一个或两个数字

对于测试正则表达式,我推荐https://regex101.com/

【讨论】:

  • 任何提交的?如果没有,请在问题中添加更多规范。对于正则表达式,事先了解所有极端情况以及使用正则表达式的具体目的非常重要
  • 编辑:忘记转义点:)
【解决方案2】:

let valid =["1000","1,000","1,000.22"];
let notValid = ["-2","1,000.233 ","0","1.00,22"];

let rge = /^[1-9]+\d*(,\d{3})*(\.\d{1,2})?$/;

for(let x of valid)
  console.log(x," è valida? ",rge.test(x));
  
for(let x of notValid)
  console.log(x," è valida? ",rge.test(x));
  

上面有一个可能的 Javascript 解决方案,您没有指定语言。 \d[0-9] 范围内的数字
句号. 是一个元字符(表示任何字符),要引用字符.,您必须将其转义,从而\.

+表示至少1次或多次

* 表示 0 次或多次

?表示0或1次

{1,2} 表示最少匹配 1 次,最多匹配 2 次​​p>

开头的 ^ 和结尾的 $ 指的是完全匹配,否则您可能会部分匹配字符串

【讨论】:

    【解决方案3】:

    一些假设:

    • 无效:“123456789.12”和“12345,123.12”

    我认为以下内容可以满足您的需求:

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

    在线查看demo

    • ^ - 起跑线锚点。
    • [1-9] - 1-9 范围内的单个数字。
    • (?: - 打开一个非捕获组:
      • \d* - 0+ 位允许任何整数。
      • | - 或者:
      • \d{0,2} - 0 到 2 位数字;
      • (?:,\d{3})* - 后跟一个非捕获组,允许任何 0+ 次逗号后跟 3 位数字。
      • (?:\.\d\d?)? - 后跟一个可选的非捕获组,最多允许两位小数。
      • )$ - 关闭非捕获组并匹配结束线锚。

    或者,如果您还希望允许任何整数后跟小数(例如:'123456789.01'),您可以将其更改为:

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

    【讨论】:

    • 123456789.12 也应该是有效的:D
    • @Loki,那么您应该使用我在答案底部给出的模式。
    • 不客气。如果它回答了您的问题,请随时接受答案。
    猜你喜欢
    • 2021-10-05
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    相关资源
    最近更新 更多