正则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的开始和结束