我正在尝试创建一个正则表达式,使得一个字符串只包含0-9
作为字符,并且长度至少为1个字符但不超过45
个字符。例如:00303039
是匹配的,而039330a29
不是。
目前这是我所拥有的,但我不确定它是否正确。
[0-9]{1,45}
我也尝试过
^[0-9]{45}*$
但是似乎也不起作用。我对正则表达式不是很熟悉,所以希望能得到帮助。谢谢!
我正在尝试创建一个正则表达式,使得一个字符串只包含0-9
作为字符,并且长度至少为1个字符但不超过45
个字符。例如:00303039
是匹配的,而039330a29
不是。
目前这是我所拥有的,但我不确定它是否正确。
[0-9]{1,45}
我也尝试过
^[0-9]{45}*$
但是似乎也不起作用。我对正则表达式不是很熟悉,所以希望能得到帮助。谢谢!
你已经接近成功了,你所需要的是开头锚点(^
)和结尾锚点($
):
^[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位数字,但这些数字必须在输入的结尾。它匹配123
,但也匹配foo123
。
^[0-9]{1,45}$
查找1到45位数字,但这些数字必须同时位于输入的开头和结尾,实际上应该匹配整个输入。第一个匹配您的字符串中任意数量的数字(也允许其他字符,例如:“039330a29”)。第二个只允许45个数字(不少于45位)。因此,从两者中选择更好的即可:
^\d{1,45}$
\d
与[0-9]
的含义相同。
\d
与[0-9]
是不同的。\d
允许匹配௪
等(以及成千上万个其他字符); [0-9]
则不行。 - Marc Gravell如果您不想以零开头,可以使用此正则表达式:
^[1-9]([0-9]{1,45}$)
如果您不介意从零开始,可以使用:
^[0-9]{1,45}$
^[0-9]{1,45}$
codaddict提供了正确的答案。至于你尝试过的方法,我会解释为什么它们不行:
[0-9]{1,45}
差不多可以,但是它匹配一个1到45位数字字符串,即使它出现在包含其他字符的更长字符串中。因此,你需要使用^
和$
来限制它的精确匹配。
^[0-9]{45}*$
匹配一个正好有45位数字的字符串,重复0次或任意次数 (*
)。这意味着字符串的长度只能为0或者是45的倍数 (90, 135, 180...)。
Rails不喜欢使用^和$来设置字符串的开头和结尾,因为这会存在一些安全隐患,最好使用\A和\z来代替。
^[0-9]{1,45}$
is correct.
对于这种情况,可以使用单词边界(\b)代替起始锚点(^)和结束锚点($):
\b\d{1,45}\b
\b
是一个位置,位于 \w 和 \W(非单词字符)之间,或者位于字符串的开头或结尾。
\d
与[0-9]
不同。\d
允许匹配௪
等(还有成千上万个);[0-9]
则不行。 - Marc Gravell