tags:

views:

688

answers:

7

I have two regular expressions that validate the values entered.

One that allows any length of Alpha-Numeric value:

@"^\s*(?<ALPHA>[A-Z0-9]+)\s*"

And the other only allows numerical values:

@"^\s*(?<NUM>[0-9]{10})"

How can I get a numerical string of the length of 11 not to be catched by the NUM regex.

A: 

Match something non-numeric after the length 10 string. My regex-foo isn't that good, but I think you've got it setup there to catch a numeric string of exactly length 10, but since you don't match anything after that, a length 11 string would also match. Try matching beyond the end of the number and you'll be good.

Michael Kohne
A: 

You could try alternation?

"^\s*(?\d{1,10}|\d{12,})"

Arnshea
+4  A: 

EDIT: I'm putting my original answer a bit lower down... I think I read you too exact. I think what you're trying to say is that you don't want to allow any more than 10 digits. So, just add a "$" at the end to specify the end of the regex.

Example: @"^\s*(?[0-9]{10})$"

ORIGINAL ANSWER BELOW:

string myRegexString = @"(?!(^\d{11}$) ... youre regex here ... )";

That reads "while ahead is not, start, 11 digits, end"

Timothy Khouri
Thanks that's what I was looking for ...
CheGueVerra
+1  A: 

If it's single line, you could specify that your match must happen at the end of the line, like this in .net ...

^\s*([0-9]{10})\z

That will accept 1234567890 but reject 12345678901.

JP Alioto
A: 

This should match only 10 digits and allow arbitrary numbers of whitespaces before and after the digits.

Non-capturing version: (only matches, the matched digits are not stored)

^\s*(?:\d{10})\s*$

Capturing version: (the matched digits are available in subgroup 1, as $1 or \1)

^\s*(\d{10})\s*$
Imran
A: 

If you are trying to match only numbers that are 10 digits long, just add a trailing anchor using $, like this:

^\s*(?:[0-9]{10})\s*$

That will match any number that is exactly 10 digits long (with optional space on either side).

Bryan
+1  A: 

Do you mean you want to match up to 10 digits? Try this:

@"^\s*[0-9]{1,10}\s*$"
Alan Moore