繁体   English   中英

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

[英]Regex to determine if string contains at least 2 numbers

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

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

用例:Bob11 Bo1b1 11Bob 1Bob1

下面是我的版本,执行速度非常快,可以很容易地更新到不同的标准,并且具有更好的可读性(至少对我而言):

正则表达式
(\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 或任何其他数字。 这是一个确保字符串中任意位置不多于不少于 5 个数字的示例: ^(\D*\d){5}\D*$ 最后一个 \D是必要的,以允许字符串以非数字结尾,如果满足五位数字的标准则验证正则表达式。*

试试这个:

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

 Pattern pattern = Pattern.compile("[0-9].*[0-9]"); Matcher matcher = pattern.matcher(string); if (matcher.find()) { return true; }
您可以在https://www.freeformatter.com/regex-tester.html检查正则表达式

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

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

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

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

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

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

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

用例:Bob11 Bo1b1 11Bob 1Bob1

为此,您不需要 RegEx。 我不确定您使用的是什么语言,但可以安全地假设您的语言中的 String 本质上是一个 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.");  
}

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

使用string.match('.*\d.*\d.*'); 它将在一个字符串中查找一个数字两次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM