regex 如何验证可能包含点或逗号的数值?

kh212irz  于 2023-04-22  发布在  其他
关注(0)|答案(7)|浏览(115)

我需要一个正则表达式来验证two or one数字,然后是,.,然后是two or one数字。
因此,这些是有效的输入:

11,11  
11.11  
1.1  
1,1
jqjz2hbq

jqjz2hbq1#

\d{1,2}[\,\.]{1}\d{1,2}

编辑:更新以满足新要求(备注);)
编辑:根据Bryan删除不必要的数量

^[0-9]{1,2}([,.][0-9]{1,2})?$
piv4azn7

piv4azn72#

为了以正则表达式的形式表示一个数字,您可以使用以下两种方法之一:
[0-9]或\d
为了指定数字出现的次数,您将添加
[0-9]* :星星表示有0位或更多位
[0-9]{2}:{N}表示N位
[0-9]{0,2}:{N,M} N位到M位
假设我想表示一个1到99之间的数字,我会这样表达:
[0-9]{1,2}或\d{1,2}
或者说我们正在使用二进制显示,显示一个字节大小,我们希望我们的数字在0和1之间,字节大小的长度为8,所以我们将其表示如下:
[0-1]{8}二进制字节的表示
然后,如果你想添加一个,或一个.符号,你会用途:
\,或.或者可以使用[.]或[,]
您也可以在可能的值之间进行选择
[.,]表示点或逗号符号
你只需要将这些片段连接在一起,所以如果你想表示一个1或2位数字,后面跟着一个逗号或一个句号,后面再跟着两个数字,你可以这样表达:
[0-9]{1,2}[.,]\d{1,2}
还要注意,C++字符串中的正则表达式字符串必须是双反斜线,因此每个\都变成\

isr3a4wc

isr3a4wc3#

\d在大多数语言中表示数字。您也可以在所有语言中使用[0-9]。对于“句点或逗号”,请使用[\.,]。根据您的语言,您可能需要更多的反斜杠,具体取决于您引用表达式的方式。最终,正则表达式引擎需要看到单个反斜杠。
*表示“零或更多”,因此\d*[0-9]*表示“零或更多数字”。?表示“零或一”。这两个限定符都不表示正好一个。大多数语言还允许您使用{m,n}表示“在m和n之间”(即:{1,2}表示“介于1和2之间”)
由于点或逗号和其他数字是可选的,您可以将它们放在一个组中,并使用?量词表示该组的“0或1”。
把所有这些放在一起,你可以用途:

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

意思是,一个或两个数字\d{1,2},后跟一个由点或逗号组成的组(...)?中的零或一个,然后后跟一个或两个数字[\.,]\d{1,2}

bjp0bcyl

bjp0bcyl4#

\d{1,2}[,.]\d{1,2}

\d表示数字,{1,2}部分表示前一个字符的1或2(本例中为\d),[,.]部分表示逗号或点。

tvz2xvvm

tvz2xvvm5#

已知最短的正则表达式(16个字符)

^\d\d?[,.]\d\d?$

^和$表示输入字符串的开始和结束(如果没有这个部分,字符串的23.45,如123.45将被匹配)。\d表示数字,\d?表示可选数字,[,.]表示点或逗号。工作示例(当你点击左侧菜单〉工具〉代码生成器,你可以生成9种流行语言之一的代码,如c#,js,php,java,...)here

[ // tests
  '11,11',      // valid
  '11.11',
  '1.1',
  '1,1',
  '111,1',      // nonvalid
  '11.111',
  '11-11',
  ',11',
  '11.',
  'a.11',
  '11,a',
].forEach(n=> console.log(`${n}\t valid: ${ /^\d\d?[,.]\d\d?$/.test(n) }`))
7hiiyaii

7hiiyaii6#

如果你想非常宽容,只需要两个最后的数字与逗号或点:

^([,.\d]+)([,.]\d{2})$
a0zr77ik

a0zr77ik7#

以下是分隔符前后任意位数的解决方案:

\d*[,.]\d*

相关问题