Should not allow single zero or 0.## - c#

How do I restrict single zero in a numeric (Decimal may alow) textbox? Textbox can accept any number but it should not accept only zero or "0.##" as value.
For example: "900.55", "200.00" is valid but "0" and "0.105"is invalid.
I tried ^[1-9]\d\.?\d[0-9]* but it accepting the "0" and "0.##"

You're almost there.
^[1-9][0-9]*(\.[0-9]+)?$
The input must
start with a number 1-9
be followed by any sequence of 0-9
and optional:
a dot followed by one or more 0-9.
Notes:
This also disallows 3.. If you don't want that, replace the last + with a *.
You can use \d instead of [0-9]. I've used the latter to stay consistent with [1-9] and keep things simple.

I think you're close, but it may be easier to include the decimal and following digits in a group and make that entire group only allowable once like this one:
^[1-9][0-9]*(\.\d*)?
Also, here's a useful site for testing regular expressions.

I think it would be simpler to do this:
float result;
return float.TryParse(textBox1.Text, out result) && result < 1;

If the textbox only accepts valid numbers, and all you want to assert is that it is > 0. All you really need then is
^[1-9]
or if trailing prefix zero's are allowed
^0*[1-9]

You could alternatively write it using a negative lookahead:
^(?!0\b)\d+(\.\d*)?$
This has the added bonus of accepting numbers with a preceding 0 like 022.

I faced the same situation and solve this.
try out it.
#"[^0]*[0-9].\d{2}$

Related

Validating Positive number with comma and period

I need a regular expression validation expression that will
ALLOW
positive number(0-9)
, and .
DISALLOW
letter(a-z)
any other letter or symbol except . and ,
for example, on my asp.net text box, if I type anything#!#--, the regular expression validation will disallow it, if I type 10.000,50 or 10,000.50 it should allowed.
I've been trying to use this regex:
^\d+(\.\d\d)?$
but my textbox also must allow , symbol and I tried using only integer regex validation, it did disallow if I type string, but it also disallow . and , symbol while it should allow number(0-9) and also . and , symbol
Don't Use \d to match [0-9] in .NET
First off, in .NET, \d will match any digits in any script, such as:
654۳۲١८৮੪૯୫୬१७੩௮௫౫೮൬൪๘໒໕២៧៦᠖
So you really want to be using [0-9]
Incomplete Spec
You say you want to only allow "digits, commas and periods", but I don't think that's the whole spec. That would be ^[0-9,.]+$, and that would match
...,,,
See demo.
Tweaking the Spec
It's hard to guess what you really want to allow: would 10,1,1,1 be acceptable?
We could start with something like this, to get some fairly well-formed strings:
^(?:[0-9]+(?:[.,][0-9]+)?|[1-9][0-9]{0,2}(?:(?:\.[0-9]{3})*|(?:,[0-9]{3})*)(?:\.[0-9]+)?)$
Play with the demo, see what should and shouldn't match... When you are sure about the final spec, we can tweak the regex.
Sample Matches:
0
12
12.123
12,12
12,123,123
12,123,123.12456
12.125.457.22
Sample Non-Matches:
12,
123.
1,1,1,1
Your regex would be,
(?:\d|[,\.])+
OR
^(?:\d|[,\.])+$
It matches one or more numbers or , or . one or more times.
DEMO
Maybe you can use this one (starts with digit, ends with digit):
(\d+[\,\.])*\d+
If you need more sophisticated price Regex you should use:
(?:(?:[1-9]\d?\d?([ \,\.]?\d{3})*)|0)(?:[\.\,]\d+)?
Edit: To make it more reliable (and dont get 00.50) you can add starting and ending symbol check:
(^|\s)(?:(?:[1-9]\d?\d?([ \,\.]?\d{3})*)|0)(?:[\.\,]\d+)($|\s)?
I think the best regex for your condition will be :
^[\d]+(?:,\d+)*(?:\.\d+)?$
this will validate whatever you like
and at the same time:
not validate:
numbers ending in ,
numbers ending in .
numbers having . before comma
numbers having more than one decimal points
check out the demo here : http://regex101.com/r/zI0mJ4
Your format is a bit strange as it is not a standard format.
My first thought was to put a float instead of a string and put a Range validation attribute to avoid negative number.
But because of formatting, not sure it would work.
Another way is the regex, of course.
The one you propose means :
"some numbers then possibly a group formed by a dot and two numbers exactly".
This is not what you exepected.
Strictly fitted your example of a number lower than 100,000.99 one regex could be :
^[0-9]{1-2}[\.,][0-9]{3}([\.,][0-9]{1-2})?$
A more global regex, that accept all positive numbers is the one posted by Avinash Raj : (?:\d|[,\.])+

How to set a regular expression for amount

I have a textbox and in it a value like $8.00 I want to validate this textbox to always check for amount values and not accept letters or anything other than a value in the format of 0.00. How can I achieve this in a RegularExpressionValidator?
Thank you for the help.
The RegEx you are looking for is #"^\d+\.\d\d"
It matches strings with 1+ digits before point and exactly two digits after
If you want it to allow start a string from $, then use #"^\$\d+\.\d\d" or #"^\$?\d+\.\d\d" for optional $.
If you want $ to be separated from digits with spaces then use #"^\$?\s*\d+\.\d\d"
The following regular expressiong will allow numbers in the following format (12345.67, 0, 0.1)
^\d{1,5}(.\d{1,2})?$
I used one of the following before i hope it helps try it.
\d{1,3}(.)\d{1,2}
or
\d{1,3}.\d{2}

Regex for allowing all other numbers like 1,10,15,90,92....etc except Zero?

Hi i have a senario where i have to prevent a field from entering zero by using Regex. But i have failed in creating the regex Can anybody help me in giving a correct regex?
What i have done is
^[1-9]\d{0,2}(\d*|(,\d{3})*)$
But this fails because it fails when a number contains zero like 340 is entered.
My senario is that the field must be able to accept all other integers except zero
How about this regex:
^[1-9][0-9]*$
String starts with 1 to 9 then has zero or more characters in 0 to 9.
It seems like regex might be overkill here. Why don't you try something like this:
int value;
if (Int32.TryParse(fieldString, out value))
{
if (value == 0)
{
// handle invalid value
}
}
This can be done with the pattern:
^(?![0,]+$)\d{0,2}(\d*|(,\d{3})*)$
Assuming you only want to accept positive integers. The pattern (?![0,]+$) prevents the expression from matching if it contains only zeros and commas. The second part is from the original expression, and allows the original combination of digits and commas for other values.
I assuming you'll be converting the field entry into an int? If so why not just do:
if (int == 0)
{
//not valid
}
However I'd hazard a guess you're using some kind of validation library?
You can try this one:
^[+-]?0*[1-9]\d*$
It accepts optional sign (plus or minus), then any number of leading zeroes, then at least one non-zero digit followed by any number of digits. You can see it in action at RegExr.

regex number problem

this is my regex for digital dnumbers:
\d+(.\d+)+(,\d+)
but now i have problem that number 3 or 30 are not valid any more. What must be my regex that also number 3 and 40 will pass.
Thx
\d+(\.\d+)*(,\d+)?
The + in regex means "at least one", whereas the * means "zero or more" and the ? means "either one or none".
Also, you have to escape periods as \. since otherwise the . character is a special character in regex meaning "any single character".
If you want to make sure that the .'s in the number (if present) always separate digits by groups of 3, you could use this (the {x} syntax means "exactly x repetitions"):
\d+(\.\d{3})*(,\d+)?
Or to force thousands separators all the time, you could use this (the {x,y} syntax means "anywhere from x to y repetitions):
\d{1,3}(\.\d{3})*(,\d+)?
\d+((\.\d+)|(,\d+))?
so you want a regex that matches 1 and 3.000 and 3.000,5 ?
If you don't want to capture the result this should do:
[.\d]+(,\d+)?
but keep in mind that this is not very accurat anyway since it also matches 2.0.0,12 and you should also include a plus minus check:
^(\+|-)?[.\d]+(,\d+)?
In C# you could do better with
double result;
bool isDouble = Double.TryParse("3.000,5", Globalisation.CultureInfo.InvariantCulture);
If what you really want is . for thousands separator, and , for the decimal separator, try this:
\d{1,3}(\.\d{3})*(,\d+)?

.NET Regex, only numeric, no spaces

I'm looking for a regular expression that accepts only numerical values and no spaces.
I'm currently using:
^(0|[1-9][0-9]*)$
which works fine, but it accepts values that consist ONLY of spaces. What is wrong with it?
The reason why is that * will accept 0 or more. A purely empty string has 0 numbers and hence meets the requirements. You need 1 or more so use + instead.
^(0|[1-9][0-9]+)$
EDIT
Here is Andrews more robust and simpler solution.
^\d+$
this regex works perfecttly
^\d*[0-9](|.\d*[0-9])?$

Categories

Resources