如果存在特定字符,如何制作所需图案的一部分

时间:2019-02-09 00:10:21

标签: regex validation pattern-matching

实际上我有这种模式:

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

做我需要的,允许用户键入:1.234,56 / 1234,56 / 123,56 / 1,但是问题是它允许1.000(千位点分隔符-我不需要这个),是如果至少有一个点,有没有办法使逗号必需?

请不要使用JavaScript解决方案。

2 个答案:

答案 0 :(得分:1)

如果您的正则表达式位于开头(例如,用^锚定),则可以对包含. {{1 }},或者不包含,,然后匹配您现有的模式:

.

Demo on regex101

答案 1 :(得分:1)

模式,*?[0-9]{0,2}的最后一部分匹配0+倍的逗号,后跟0-2个数字,例如,使总匹配对1.1,,,有效。

您还可以使用alternation来匹配包含点和逗号的变体,或者|匹配一个或多个数字,然后匹配一个逗号和1的可选部分-2位数字。

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

Regex101 demo

说明

  • ^字符串的开头
  • (?:非捕获组
    • [0-9]{1,3}\.[0-9]{1,3},[0-9]{1,2}出现点号时请使用逗号
    • |
    • [0-9]+(?:,[0-9]{2})?匹配1个以上的数字,后跟一个可选的逗号和1-2个数字
  • )关闭非捕获组
  • $字符串的结尾