Regex: Check if string contains at least one digit

后端 未结 9 1984
盖世英雄少女心
盖世英雄少女心 2020-12-09 07:40

I have got a text string like this:

test1test

I want to check if it contains at least one digit using a regex.

What would this reg

相关标签:
9条回答
  • 2020-12-09 07:50

    I'm surprised nobody has mentioned the simplest version:

    \d
    

    This will match any digit. If your regular expression engine is Unicode-aware, this means it will match anything that's defined as a digit in any language, not just the Arabic numerals 0-9.

    There's no need to put it in [square brackets] to define it as a character class, as one of the other answers did; \d works fine by itself.

    Since it's not anchored with ^ or $, it will match any subset of the string, so if the string contains at least one digit, this will match.

    And there's no need for the added complexity of +, since the goal is just to determine whether there's at least one digit. If there's at least one digit, this will match; and it will do so with a minimum of overhead.

    0 讨论(0)
  • 2020-12-09 07:51

    In Java:

    public boolean containsNumber(String string)
    {
        return string.matches(".*\\d+.*");
    }  
    
    0 讨论(0)
  • 2020-12-09 07:52

    This:

    \d+
    

    should work

    Edit, no clue why I added the "+", without it works just as fine.

    \d
    
    0 讨论(0)
  • 2020-12-09 07:57

    In perl:

    if($testString =~ /\d/) 
    {
        print "This string contains at least one digit"
    }
    

    where \d matches to a digit.

    0 讨论(0)
  • 2020-12-09 07:59

    Another possible solution, in case you're looking for all the words in a given string, which contain a number

    Pattern

    \w*\d{1,}\w*
    
    • \w* - Matches 0 or more instances of [A-Za-z0-9_]
    • \d{1,} - Matches 1 or more instances of a number
    • \w* - Matches 0 or more instances of [A-Za-z0-9_]

    The whole point in \w* is to allow not having a character in the beginning or at the end of a word. This enables capturing the first and last words in the text.

    If the goal here is to only get the numbers without the words, you can omit both \w*.

    Given the string

    Hello world 1 4m very happy to be here, my name is W1lly W0nk4
    

    Matches

    1 4m W1lly W0nk4
    

    Check this example in regexr - https://regexr.com/5ff7q

    0 讨论(0)
  • 2020-12-09 08:12

    The regular expression you are looking for is simply this:

    [0-9]
    

    You do not mention what language you are using. If your regular expression evaluator forces REs to be anchored, you need this:

    .*[0-9].*
    

    Some RE engines (modern ones!) also allow you to write the first as \d (mnemonically: digit) and the second would then become .*\d.*.

    0 讨论(0)
提交回复
热议问题