正则表达式允许字符串仅包含数字0 - 9并将长度限制为45

New*_*gEx 51 regex string string-matching

我试图创建一个正则表达式,使一个字符串只包含0-9作为字符,它必须至少1个字符长度,不超过45.所以例子将是00303039匹配,而039330a29不是.

到目前为止,这是我所拥有的,但我不确定它是否正确

[0-9]{1,45} 
Run Code Online (Sandbox Code Playgroud)

我也试过了

^[0-9]{45}*$
Run Code Online (Sandbox Code Playgroud)

但这似乎也不起作用.我对正则表达式不太熟悉,所以任何帮助都会很棒.谢谢!

cod*_*ict 147

你几乎就在那里,你需要的只是启动anchor(^)和结束锚($):

^[0-9]{1,45}$
Run Code Online (Sandbox Code Playgroud)

\d是字符类的缩写[0-9].您可以将其用作:

^\d{1,45}$
Run Code Online (Sandbox Code Playgroud)

锚点迫使模式匹配整个输入,而不仅仅是它的一部分.


你的正则表达式会[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位数,但这些数字必须同时位于输入的开头和结尾,实际上它应该是整个输入.

  • 如果你生活在一个unicode世界(大多数人都这样做),`\ d`**不是和'[0-9]`相同.`\ d`允许'4`等(以及数千个)匹配; `[0-9]`没有. (4认同)

eum*_*iro 14

第一个匹配字符串中的任意数字位数(也允许其他字符,即:"039330a29").第二个只允许45位数(而不是更少).所以从两者中取得更好的效果:

^\d{1,45}$
Run Code Online (Sandbox Code Playgroud)

在哪里\d都一样[0-9].


Cha*_*nil 11

如果您不想从零开始,请使用此正则表达式:

^[1-9]([0-9]{1,45}$)
Run Code Online (Sandbox Code Playgroud)

如果您不介意从零开始,请使用:

^[0-9]{1,45}$
Run Code Online (Sandbox Code Playgroud)


Luk*_*keH 5

您可能需要两种尝试的组合:

^[0-9]{1,45}$
Run Code Online (Sandbox Code Playgroud)


Bol*_*ock 5

codaddict提供了正确的答案.至于你尝试过的,我会解释为什么他们没有做到这一点:

  • [0-9]{1,45}几乎就在那里,但它匹配一个1到45位的字符串,即使它出现在另一个包含其他字符的较长字符串中.因此,您需要^并将$其限制为完全匹配.

  • ^[0-9]{45}*$匹配精确的45位数字符串,重复0或任意次数(*).这意味着字符串的长度只能是0或45的倍数(90,135,180 ......).