我正在尝试创建一个正则表达式以使字符串仅包含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 位数字,因此字符串 like 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 位(不少于)。因此,只需从两者中获取更好的:
^\d{1,45}$
哪里\d
一样[0-9]
。
如果您不想从零开始,请使用此正则表达式:
^[1-9]([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...)。
这两种尝试的组合可能是您需要的:
^[0-9]{1,45}$
Rails 出于某些安全原因不喜欢使用 ^ 和 $ ,可能最好使用 \A 和 \z 来设置字符串的开头和结尾
^[0-9]{1,45}$
是正确的。
对于这种情况,单词边界(\b) 也可以用来代替起始锚 (^) 和结束锚 ($):
\b\d{1,45}\b
\b
是 \w 和 \W (非单词字符)之间的位置,或者在字符串的开头或结尾。