开发者

Using .NET Regular Expression, match any string with exactly 9 digits

I'm trying to create a regex expression to match any string that has exactly 9 digits. the digits can exist anywhere in the string.

For example, if you passed in t开发者_运维问答he following strings, you'd get a match: 123456789 123aeiou456abc789

These strings would fail to provide a match 12345678 1234567890


Try this:

@"^(\D*\d){9}\D*$"

Or use this improved version. It assumes that you only want to match 0-9 and not other characters that represent digits in other languages. It also uses a non-capturing group to improve performance:

"^(?:[^0-9]*[0-9]){9}[^0-9]*$"

Here's a breakdown of what it means:

^        Start of string.
(?:      Start a non-capturing group.
[^0-9]*  Match zero or more non-digits.
[0-9]    Match exactly one digit.
)        Close the group.
{9}      Repeat the group exactly 9 times.
[^0-9]*  Match zero or more non-digits.
$        End of string.

Here's a testbed for it:

string regex = "^(?:[^0-9]*[0-9]){9}[^0-9]*$"
string[] tests = {
                     "123456789",
                     "123aeiou456abc789",
                     "12345678",
                     "1234567890"
                 };
foreach (string test in tests)
{
    bool isMatch = Regex.IsMatch(test, regex); 
    Console.WriteLine("{0}: {1}", test, isMatch);
}

Results:

123456789: True
123aeiou456abc789: True
12345678: False
1234567890: False


check out the website

http://www.regexlib.com/CheatSheet.aspx

I found it tobe very helpful.


Here's my take: ^[^0-9]*[0-9]{9}[^0-9]*$

FWIW, there is a REALLY cool little app to help you build RegEx's which will parse them and explain what your expression is doing in plain English as well as providing an actual UI to help you add expressions you may not be very familiar with. Check out Expresso.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜