I have the following TextBox and RegularExpressionValidator
<asp:TextBox ID="txtQuantity" runat="server" MaxLength="7"></asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1"
runat="server" ErrorMessage="Enter only positive integer values."
ControlToValidate="txtQuantity" ValidationExpression="^[1-9][0-9]*$"
CssClass="required" Display="Dynamic" />
It is reading all the positive integers properly and giving error messages on wrong entries.
But validation is getting failed when a positive integer preceding with a 0 is entered.
Example: "098", "09" etc
Should I change my regular expression or the logic?
You can allow zeros with non-zeros and disallow just zeros (or empty string) with
^(?!0+$)[0-9]+$
See demo
REGEX EXPLANATION:
^ - Start of string (not sure it is necessary, I think the regex is anchored by default, but please check)
(?!0+$) - A negative lookahead that checks if the whole string is not equal to 0 (or 0000)
[0-9]+ - 1 or more digits from 0 to 9 (note that it already does not allow empty string)
$ - End of string (same note as for ^)
Related
My RegularExpressValidator1 does not fire. Not sure what is missing below. Any suggestion?
<td class="txtbox1"><asp:TextBox ID="txtCard" runat="server" ></asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1"
ControlToValidate="txtCard"
Forecolor="Red"
ValidationExpression="(0*[1-9]\d*)" runat="server"
ErrorMessage = "Enter numeric number only.">
</asp:RegularExpressionValidator>
</td>
Take a closer look at Microsoft's page How To: Use Regular Expressions to constrain input in ASP.Net.
Enclosing the expression in the caret (^) and dollar sign ($)markers ensures that the expression consists of the desired content and nothing else. A ^ matches the position at the beginning of the input string and a $ matches the position at the end of the input string. If you omit these markers, an attacker could affix malicious input to the beginning or end of valid content and bypass your filter.
If you scroll down to the section titled Common Regular Expressions, it includes a RegEx for positive integers:
^\d+$
Their pattern restricts the input to only numbers, whereas yours seems like it's only checking to see if a number is included in any fashion.
As an example, consider this input:
1234 and text!
Using ^\d+$ (Source)
0 matches
Using (0*[1-9]\d*) (Source)
1 match: 1234
As an unrelated note, I'd suggest modifying your placeholder text from "Enter a numeric number only." to something like "Enter a number" or "Enter a numeric value", as "numeric number" is a bit redundant!
I am trying to implement this rule with regex : "The name at asp:textbox that is given as input by a user must not contain any spaces as well as any of the following characters:"
`~!##$%^&*()=+[]{}\|;:'",<>/?_ .
And also the length must not be greater than 15.
I am using something like this:
<asp:RegularExpressionValidator ID="validateName" runat="server" Text="*" ValidationExpression="(?=^.{1,15}$)(^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$)" ControlToValidate="txtName" Display="Dynamic" SetFocusOnError="true" ValidationGroup="Wizard"> </asp:RegularExpressionValidator>
BUT the problem is that test12. is not valid (right) and test12.test.something is passing, which is not right for my issue.
Also I tried this regex without result as asdasdads.gr passes (not right):
(?=^[A-Za-z0-9\-]{1,15}$)
Maybe I made it too complicated and now I am getting stuck.
Since your requirements are:
No characters from this set: `~!##$%^&*()=+[]{}\|;:'",<>/?_ .
And also the length must not be greater than 15.
You may just use a negated character class with {1,15} limiting quantifier:
ValidationExpression="^[^\][^`~!##$%^&*()=+{}\\|;:'",<>/?_\s.]{1,15}$"
See regex demo. We must escape the \ symbol and we need to escape the ] symbol (as it can be used by JS engine). Since the \ is used to specify escape sequences, escape it, too (use double slashes to denote one literal \). Note you need to serialzie the double quote as " (or use a hex representation for a regex - \x22) if you are using it inside some HTML attribute.
Detailed explanation:
^ - start of string
[^\][^`~!##$%^&*()=+{}\\|;:'",<>/?_\s.]{1,15} - 1 to 15 characters (due to the limiting quantifier {1,15}) that are not in the defined set (a [^...] is a negated character class). If you plan to allow empty string, use {0,15} quantifier.
$ - end of string
In the comments we discussed trying only searching for valid characters.
[A-Za-z0-9\-]{1,15}
This should work for "test12" if you need "test12." just add the full stop in there. Also \d is for digits instead of using 0-9
[A-Za-z\d\-\.]{1,15}
if you want to allow it to have an optional full top at the end use the following regex. The ? means 0 or 1.
[A-Za-z\d\-]{1,15}\.?
Example Here
Finaly this worked for me:
ValidationExpression="^[^\][^`~!##$%^&*()=+{}\\|;:'\x22,<>/?_\s.]{1,15}$"
Full code:
<asp:TextBox ID="txtHostname" runat="server" CssClass="NormalTextBox" Text=""></asp:TextBox>
<asp:RequiredFieldValidator ID="HostnameValidator" runat="server" Text="*" Display="Dynamic"
ControlToValidate="txtHostname" meta:resourcekey="HostnameValidator" SetFocusOnError="true"
ValidationGroup="VpsWizard">
*
</asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="valCorrectHostname" runat="server" Text="*" meta:resourcekey="valCorrectHostname"
ValidationExpression="^[^\][^`~!##$%^&*()=+{}\\|;:'\x22,<>/?_\s.]{1,15}$"
ControlToValidate="txtHostname" Display="Dynamic" SetFocusOnError="true" ValidationGroup="VpsWizard">
</asp:RegularExpressionValidator>
I need code for alpha numeric ,which is used in regular expression in asp.net to enter the data inside the textbox .
Regex for alpha numeric:
"^[a-zA-Z0-9]*$"
If you don't want empty strings, use + instead of *.
I guess below should be enough.
^[0-9A-Za-z]*$
Here is the break down
^ indicates start of the string
0-9 all number from 0 to 9
A-Z all Upper case character
a-z all small case character
* indicates 0 or more character
$ end of string
Use this ValidationExpression="^[a-zA-Z0-9.#]{0,25}$". It accepts . and # symbol also. If not remove them
<asp:RegularExpressionValidator id="RegularExpressionValidator1" runat="server" ControlToValidate="TextBox1" ValidationExpression="^[a-zA-Z0-9.#]{0,25}$" ErrorMessage="Only Alphanumeric"></asp:RegularExpressionValidator>
Can anyone give me an example of a regular expression for must be loger than {n} and must include at least 2 digit integer
I have the following for now but it only validates the length;
<asp:RegularExpressionValidator ID="myTxtVal"
runat="server" ControlToValidate="myTxt"
ErrorMessage="Input Is Too Short" ValidationExpression=".{15}.*" />
<asp:RegularExpressionValidator ID="myTxtVal"
runat="server" ControlToValidate="myTxt"
ErrorMessage="Input Is Too Short" ValidationExpression="^(?=.*?\d{2}).{15}" />
Edit: fixed for 2 digit integer. Not the same as 'has 2 digits'... ;-)
It uses the lookahead to validate that there are at least two digits in a row, then the .{15} part to match 15 characters. It doesn't need to match the rest of the string, so I removed the .*.
Something like that?
^(?=.*\d{2}).{4,}$
See it here at Regexr
The first construct (?=.*\d{2}) is a look ahead, it checks if somewhere in your string are 2 digits in a row. (I am not sure at this point if it is what you need)
The second part checks .{4,} checks the length of the string for at least 4 characters.
^ anchors the pattern to the start of the string
$ anchors the pattern to the end of the string
Just another method, purely for your interest:
/^(.|()\d\d){N-1}\2/
This works in flavours of regex where back referencing with \N fails to match if the Nth group to which it refers failed to match. The expression can only successfully match if the second group was matched, which in turn can only happen if \d\d matches. For example, N = 15:
/^(.|()\d\d){14}\2/
I'm trying to validate an ASP TextBox that can only have 1-2 digits (not zero) using the following regex:
^[1-9]{1,2}
This regex doesn't validate if the field is empty (assumed it would due to the 1-2 part)
Also tried ^[1-9+]{1,2} to no avail.
These are my controls:
<asp:TextBox ID="txtInHour"
MaxLength="2"
runat="server"
Text='<%# Bind("InHour") %>'
Width="80"/>
<asp:RegularExpressionValidator ID="rvInHour"
ControlToValidate="txtInHour"
Display="None"
ValidationExpression="^[1-9]{0,2}$"
runat="server"
ErrorMessage="InHour is incorrectly formatted." />
The first thing I notice is that you don't allow zeros in your pattern. So 10 or 20 is not valid? The second thing is that you start with "starts with" AKA "^" but there's no "ends with" AKA "$"
So.. try this:
^[1-9][0-9]?$
In human readable:
starts with 1-9, followed by an optional digit from 0-9, end of string.
On the other hand I don't know what you've meant with ("no zeros") - no zeros at all?!
I found out that for some reason RegularExpressionValidators don't work when there's no input to match against (blank fields) so I had to use a seperate RequiredFieldValidator. Thanks for your input everyone!
You can use this regex :
^([1-9]|[1-9][0-9])$