正则表达式确定字符串是否包含至少2个数字

时间:2018-03-15 20:12:34

标签: android regex

我正在尝试编写一个用户名字段验证器,其中一个要求是该字段必须包含至少2个数字(更多是好的,不能少)。我以为我可以做这样的事情,正则表达式在第一个数字上分裂,但从不在第二个数字上。

    String[] arr = string.split("[0-9][0-9]");
    return arr.length > 2;

用例: Bob11 Bo1b1 11Bob 1Bob1

7 个答案:

答案 0 :(得分:1)

下面是我的版本,具有极高的执行速度,可以轻松地更新为不同的标准,并且具有更好的可读性(至少对我而言):

正则表达式
(\D*\d){2,}

示例

Bob11   - Match
Bo1b1   - Match
11Bob   - Match
1Bob1   - Match
11235   - Match

Bobb    - Does NOT Match
Bob1    - Does NOT Match
Bo1b    - Does NOT Match
1Bob    - Does NOT Match

说明
\D-非数字。
*-(量词)零次或多次。
\d-一位。
(\D*\d)-将以上组合封装为一个组。
{2,}-(量化符)可确保该组至少出现2次,并且可以出现更多次。

(\D*\d){2,}-因此,\D*个非数字零或无限次,后跟一个\d数字,此组合重复了{2,}两个或无限次。

更新为不同条件
可以包含^(开始字符串锚)和$(结束字符串锚)以确保限制,以防准则更改为精确2或任何其他数字的情况。 此示例确保在字符串^(\D*\d){5}\D*$中的任何地方不超过5个数字。 最后一个\ D 是必要的,以允许字符串以非数字结尾,如果满足五位数字的条件,则验证正则表达式。*

答案 1 :(得分:0)

试试这个:

  • 。*匹配所有内容(从0到n次)
  • [0-9]是0-9
  • 的数字

Pattern pattern = Pattern.compile("[0-9].*[0-9]");
Matcher matcher = pattern.matcher(string);
if (matcher.find()) {
   return true;
}
您可以在RegionEndpoint

中查看正则表达式

答案 2 :(得分:0)

[^\d]*\d[^\d]*\d.*应该是一种方法(有几种......)

  • [^ \ d] *匹配任何不是数字的字符(零到无限次)
  • \ d匹配一位数(一次)
  • 。*匹配所有内容(零到无限次)

我使用[^\d]*因为.*贪婪,因此可能匹配太多(取决于语言)。可以通过附加?.*?

来停用贪婪行为

您可以在https://regex101.com/进行测试。

答案 3 :(得分:-1)

使用string.match(‘.*\d.*\d.*’); 它会在字符串中查找两位数字。

答案 4 :(得分:-1)

您可以像here所描述的那样执行此操作。

String pattern= "^(?=.*?\\d.*\\d)[a-zA-Z0-9]{3,}$";
return string.matches(pattern);

答案 5 :(得分:-1)

您不需要RegEx。我不确定您使用的语言是什么,但可以安全地假设您所用语言的字符串本质上是Char数组。如果是这种情况,则获取Char数组中的数字字符数,并比较它是否大于1.

例如,这是一个C#示例:

String username = Console.ReadLine();
if (username.Count(c => Char.IsDigit(c)) > 1) {
    Console.WriteLine("The String contains 2 or more digits.");
} else {
    Console.WriteLine("The String did not contain 2 or more digits.");  
}

这也可能会产生更快的结果。

答案 6 :(得分:-1)

使用正则表达式删除所有非数字字符并计算长度