正则expression式允许一个string只包含数字0 – 9和限制长度为45

我正在尝试创build一个正则expression式来使string只包含0-9作为字符,它必须是至less1个字符长度不超过45 。 所以例子将是00303039将是一场比赛, 039330a29不会。

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

 [0-9]{1,45} 

我也试过了

 ^[0-9]{45}*$ 

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

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

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

\d是字符类[0-9]简称。 你可以使用它作为:

 ^\d{1,45}$ 

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


您的正则expression式[0-9]{1,45}查找1到45位数字,所以像foo1这样的string也会得到匹配,因为它包含1

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

[0-9]{1,45}$查找1到45位数字,但这些数字必须位于input的末尾 。 它匹配123而且foo123

^[0-9]{1,45}$查找1到45位数字,但是这些数字必须位于input的开始位置和结束位置,实际上它应该是整个input。

第一个匹配string中的任何数字(也允许其他字符,即:“039330a29”)。 第二个只允许45位数(不能less于)。 所以只要从两方面都好一些:

 ^\d{1,45}$ 

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

如果你不想从零开始,使用这个正则expression式:

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

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

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

codaddict提供了正确的答案。 至于你所尝试的,我会解释为什么他们不能削减:

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

  • ^[0-9]{45}*$匹配正好为45位的string,重复0或任意次数( * )。 这意味着string的长度只能是0或45的倍数(90,135,180 …)。

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

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

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

Rails不喜欢使用^和$出于某些安全原因,可能更好使用\ A和\ z来设置string的开始和结束