【问题标题】:Regex for digits and space as thousand separator数字和空格的正则表达式作为千位分隔符
【发布时间】:2016-12-07 10:49:23
【问题描述】:

这个正则表达式应该允许我输入带有空格作为千​​位分隔符的数字,但它也可以接受字母和特殊字符。有人可以帮我解决正则表达式的问题吗:

reg = new RegExp("^(?:\s*([0-9]* [0-9]{3})\s*)*$||[0-9]*");

【问题讨论】:

  • 这个正则表达式匹配任何字符串。你需要匹配什么模式?请提供一些输入以进行测试,说明您需要得到什么结果。
  • 发布您的输入以供匹配
  • 输入可以像 Valid : "3000" "3 000" "3 000 000"
  • 无效的是:任何特殊字符或字母
  • 您似乎需要var rx = /^\d+(?: \d{3})*$/;,如果this solution 适合您,请告诉我。如果您需要支持前导/尾随空格,请在^ 之后和$ 之前添加\s*

标签: regex regex-lookarounds regex-greedy


【解决方案1】:

OR 的分组似乎不正确(另外,使用|,而不是||)。

试试这个

   new RegExp(
    "^("  //start of line
    + "(?:" // number with thousands separator
      + "[0-9]{1,3}" //1..3 digits once 
      + "(?: [0-9]{3})*?" //exactly 3 digits, preceded by space, any number of times
    + ")"
    + "|(?:" // or just number 
      + "[0-9]+" //any number of digits without spaces
    + ")"
    + ")$");

根据您的需要,您可以允许或拒绝非三位数字部分。

【讨论】:

  • 你的模式验证3000 000是无效的,它不验证3 000 000是有效的
  • 它唯一有效的问题是它允许在开头和结尾有空格。
  • 只需在开头和结尾删除 \\s* (从您的示例中,我认为这是一项要求)。我确实编辑了答案。
【解决方案2】:

我认为您可以大大简化该正则表达式。

^[0-9 ]+$

这匹配带或不带空格的数字作为分隔符。但是,请注意,它将匹配任何地方的空格(不仅作为千位分隔符)。不过调整起来应该很容易。

编辑:这是另一种强制空格分隔数以千计的替代方法。

^[0-9]{1,3}()\s?([0-9]{3}\s?)+$

【讨论】:

  • 我用几个不同的输入对其进行了测试。
  • 什么输入失败了?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-03
  • 1970-01-01
相关资源
最近更新 更多