English 中文(简体)
Regex允许字符串只包含数字0-9,并将长度限制为45
原标题:Regex allow a string to only contain numbers 0 - 9 and limit length to 45

我正在尝试创建一个正则表达式,使字符串仅包含0-9作为字符,并且其长度必须至少为1个字符,且不超过45。因此,示例是00303039将匹配,而039330a29则不匹配。

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

[0-9]{1,45} 

我也试过

^[0-9]{45}*$

但这似乎也不起作用。我对regex不是很熟悉,所以任何帮助都会很好。谢谢

问题回答

你几乎到了,你所需要的只是开始锚(^)和结束锚($):

^[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,但也匹配223foo

[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}$

瘾君子提供了正确的答案。至于你所尝试的,我将解释为什么他们没有成功:

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

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

这两种尝试的结合可能正是您所需要的:

^[0-9]{1,45}$

^[0-9]{1,45}$正确。

出于某些安全原因,Rails不喜欢使用^和$,也许最好使用A和z来设置字符串的开头和结尾

在这种情况下,也可以使用单词边界()来代替起始锚点(^)和结束锚点($):

d{1,45}

是介于w和w(非单词字符)之间的位置,或者位于字符串的开头或结尾。





相关问题
Simple JAVA: Password Verifier problem

I have a simple problem that says: A password for xyz corporation is supposed to be 6 characters long and made up of a combination of letters and digits. Write a program fragment to read in a string ...

Case insensitive comparison of strings in shell script

The == operator is used to compare two strings in shell script. However, I want to compare two strings ignoring case, how can it be done? Is there any standard command for this?

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

String initialization with pair of iterators

I m trying to initialize string with iterators and something like this works: ifstream fin("tmp.txt"); istream_iterator<char> in_i(fin), eos; //here eos is 1 over the end string s(in_i, ...

break a string in parts

I have a string "pc1|pc2|pc3|" I want to get each word on different line like: pc1 pc2 pc3 I need to do this in C#... any suggestions??

Quick padding of a string in Delphi

I was trying to speed up a certain routine in an application, and my profiler, AQTime, identified one method in particular as a bottleneck. The method has been with us for years, and is part of a "...