正则表达式:检查字符串是否包含至少一个数字

cra*_*her 35 regex

我有一个像这样的文本字符串:

test1test
Run Code Online (Sandbox Code Playgroud)

我想检查它是否包含使用正则表达式的至少一个数字.

这个正则表达式是什么样的?

Joe*_*ite 73

我很惊讶没人提到最简单的版本:

\d
Run Code Online (Sandbox Code Playgroud)

这将匹配任何数字.如果您的正则表达式引擎支持Unicode,这意味着它将匹配任何语言中定义为数字的任何内容,而不仅仅是阿拉伯数字0-9.

没有必要把它放在[方括号中]来定义它作为一个字符类,正如其他答案之一所做的那样; \d单独工作.

由于它没有锚定^$,它将匹配字符串的任何子集,因此如果字符串包含至少一个数字,则匹配.

并且不需要增加复杂性+,因为目标只是确定是否至少有一个数字.如果至少有一个数字,这将匹配; 它会以最小的开销实现这一目标.

  • Java的string.matches("\\ d")返回false,其中string ="test1test".建议?见http://fiddle.re/vf9w6 (5认同)
  • @Watt,如果你玩那个小提琴,你会看到一些方法 *do* 识别匹配——例如,`replaceFirst()` 删除它。看起来 [`matches` 尝试匹配整个字符串](http://stackoverflow.com/a/4450166/87399),在模式的开头隐式添加了 `^`,在结尾添加了 `$`。 (2认同)

Don*_*ows 18

您正在寻找的正则表达式就是这样:

[0-9]
Run Code Online (Sandbox Code Playgroud)

你没有提到你正在使用的语言.如果正则表达式求值程序强制REs被锚定,则需要:

.*[0-9].*
Run Code Online (Sandbox Code Playgroud)

一些RE引擎(现代的!)也允许你写第一个\d(mnemonically:d igit)然后第二个将成为.*\d.*.


小智 14

在Java中:

public boolean containsNumber(String string)
{
    return string.matches(".*\\d+.*");
}  
Run Code Online (Sandbox Code Playgroud)


Sil*_*ost 11

你可以使用前瞻性断言:

^(?=.*\d).+$
Run Code Online (Sandbox Code Playgroud)

  • @Joe:因为很可能它不是OP需要做的唯一检查 (4认同)
  • 好悲伤,为什么要那么复杂? (3认同)