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