正则表达式允许字符串仅包含数字0 - 9并将长度限制为45

时间:2010-10-19 11:58:31

标签: regex string string-matching

我正在尝试创建一个正则表达式,使字符串只包含0-9作为字符,且长度必须至少为1个字符且不超过45。例如,00303039将匹配,而039330a29则不会。

到目前为止,这是我所拥有的,但我不确定它是否正确

[0-9]{1,45} 

我也试过

^[0-9]{45}*$

但这似乎也不起作用。我对正则表达式不太熟悉,所以任何帮助都会很棒。谢谢!

8 个答案:

答案 0 :(得分:140)

你几乎就在那里,你需要的只是开始锚(^)和结束锚($):

^[0-9]{1,45}$

\d是字符类[0-9]的缩写。您可以将其用作:

^\d{1,45}$

锚点强制模式匹配整个输入,而不仅仅是部分


您的正则表达式[0-9]{1,45}会查找1到45位数,因此foo1之类的字符串也会匹配,因为它包含1

^[0-9]{1,45}查找1到45位数,但这些数字必须位于输入的 开头 。它与123匹配,但也与123foo

匹配

[0-9]{1,45}$查找1到45位数字,但这些数字必须位于输入的 end 。它与123匹配,但也与foo123

匹配

^[0-9]{1,45}$查找1到45位数,但这些数字在输入的开头和结尾必须 ,实际上应该< strong> 整个 输入。

答案 1 :(得分:14)

第一个匹配字符串中的任意数字位数(也允许其他字符,即:“039330a29”)。第二个只允许45位数(而不是更少)。所以从两者中取得更好的效果:

^\d{1,45}$

其中\d[0-9]相同。

答案 2 :(得分:10)

如果您不想从零开始,请使用此正则表达式:

^[1-9]([0-9]{1,45}$)

如果您不介意从0开始,请使用:

^[0-9]{1,45}$

答案 3 :(得分:5)

codaddict提供了正确的答案。至于你所尝试的内容,我会解释为什么他们没有做到这一点:

  • [0-9]{1,45}几乎就在那里,但它匹配1到45位的字符串,即使它出现在另一个包含其他字符的较长字符串中。因此,您需要^$将其限制为完全匹配。

  • ^[0-9]{45}*$匹配精确的45位数字符串,重复0次或任意次数(*)。这意味着字符串的长度只能是0或45的倍数(90,135,180 ......)。

答案 4 :(得分:4)

两种尝试的组合可能就是您所需要的:

^[0-9]{1,45}$

答案 5 :(得分:2)

^[0-9]{1,45}$是正确的。

答案 6 :(得分:2)

Rails不喜欢使用^和$出于某些安全原因,可能最好使用\ A和\ z来设置字符串的开头和结尾

答案 7 :(得分:-1)

在这种情况下,也可以使用单词边界(\ b)代替开始锚(^)和结束锚($):

\b\d{1,45}\b

\b是\ w和\ W(非单词char)之间的位置,或者位于字符串的开头或结尾。