我正在尝试创建一个正则表达式,使字符串只包含0-9
作为字符,且长度必须至少为1个字符且不超过45
。例如,00303039
将匹配,而039330a29
则不会。
到目前为止,这是我所拥有的,但我不确定它是否正确
[0-9]{1,45}
我也试过
^[0-9]{45}*$
但这似乎也不起作用。我对正则表达式不太熟悉,所以任何帮助都会很棒。谢谢!
答案 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)之间的位置,或者位于字符串的开头或结尾。