RegExp Again!

R

RN1

Using Regular Expression, I want to ensure that users enter either a 2-
digit or a 3-digit whole number in a TextBox. This is how I framed the
ValidationExpression in the RegularExpressionValidator:

--------------------------------------------------------------------------------
<asp:TextBox ID="txt1" runat="server"/>
<asp:RegularExpressionValidator ID="regexp1" ControlToValidate="txt1"
Display="dynamic" ErrorMessage="Invalid Text"
ValidationExpression="[0-9]{3}|[0-9]{2}" runat="server"/>
--------------------------------------------------------------------------------

Suppose a user enters 16 & 216 in the TextBox. As expected, both the
numbers return True but if I just reverse the ValidationExpression
i.e. change the ValidationExpression from

[0-9]{3}|[0-9]{2}

to

[0-9]{2}|[0-9]{3}

& then input 16 & 216 in the TextBox, 16 correctly evaluates to True
but 216 strangely evaluates to False!

After a plethora of trial & error methods, I realized that if the
second ValidationExpression (the one which evaluates 216 to False) is
enclosed in brackets & a $ sign is appended at the end of the
expression like this

([0-9]{2}|[0-9]{3})$

then 216 correctly evaluates to True (& so does 16).

What I couldn't figure out is the logic behind the expression when it
is wrapped in brackets & a $ sign is appended at the end! Can someone
please explain me this? What more work does the edited
ValidationExpression do to make 216 evaluate to True?

I am aware that $ means the end of a string.

Thanks,

Ron
 
M

marss

Using Regular Expression, I want to ensure that users enter either a 2-
digit or a 3-digit whole number in a TextBox. This is how I framed the
ValidationExpression in the RegularExpressionValidator:

--------------------------------------------------------------------------------
<asp:TextBox ID="txt1" runat="server"/>
<asp:RegularExpressionValidator ID="regexp1" ControlToValidate="txt1"
Display="dynamic" ErrorMessage="Invalid Text"
ValidationExpression="[0-9]{3}|[0-9]{2}" runat="server"/>
--------------------------------------------------------------------------------

There is a less complex solution:
ValidationExpression="\d{2,3}"

Regards,
Mykola
http://marss.co.ua
 
L

Lloyd Sheen

RN1 said:
Using Regular Expression, I want to ensure that users enter either a 2-
digit or a 3-digit whole number in a TextBox. This is how I framed the
ValidationExpression in the RegularExpressionValidator:

--------------------------------------------------------------------------------
<asp:TextBox ID="txt1" runat="server"/>
<asp:RegularExpressionValidator ID="regexp1" ControlToValidate="txt1"
Display="dynamic" ErrorMessage="Invalid Text"
ValidationExpression="[0-9]{3}|[0-9]{2}" runat="server"/>
--------------------------------------------------------------------------------

Suppose a user enters 16 & 216 in the TextBox. As expected, both the
numbers return True but if I just reverse the ValidationExpression
i.e. change the ValidationExpression from

[0-9]{3}|[0-9]{2}

to

[0-9]{2}|[0-9]{3}

& then input 16 & 216 in the TextBox, 16 correctly evaluates to True
but 216 strangely evaluates to False!

After a plethora of trial & error methods, I realized that if the
second ValidationExpression (the one which evaluates 216 to False) is
enclosed in brackets & a $ sign is appended at the end of the
expression like this

([0-9]{2}|[0-9]{3})$

then 216 correctly evaluates to True (& so does 16).

What I couldn't figure out is the logic behind the expression when it
is wrapped in brackets & a $ sign is appended at the end! Can someone
please explain me this? What more work does the edited
ValidationExpression do to make 216 evaluate to True?

I am aware that $ means the end of a string.

Thanks,

Ron

Check out the Expresso application. Written in dot.net and has a GUI for
developing regex. Lots of examples of expressions built in and it will
generate code in both C# and VB.Net. Been using it since dot.net v.0.

LS
 
R

RN1

Using Regular Expression, I want to ensure that users enter either a 2-
digit or a 3-digit whole number in a TextBox. This is how I framed the
ValidationExpression in the RegularExpressionValidator:
---------------------------------------------------------------------------­-----
<asp:TextBox ID="txt1" runat="server"/>
<asp:RegularExpressionValidator ID="regexp1" ControlToValidate="txt1"
Display="dynamic" ErrorMessage="Invalid Text"
ValidationExpression="[0-9]{3}|[0-9]{2}" runat="server"/>
---------------------------------------------------------------------------­-----
Suppose a user enters 16 & 216 in the TextBox. As expected, both the
numbers return True but if I just reverse the ValidationExpression
i.e. change the ValidationExpression from
[0-9]{3}|[0-9]{2}
[0-9]{2}|[0-9]{3}

& then input 16 & 216 in the TextBox, 16 correctly evaluates to True
but 216 strangely evaluates to False!
After a plethora of trial & error methods, I realized that if the
second ValidationExpression (the one which evaluates 216 to False) is
enclosed in brackets & a $ sign is appended at the end of the
expression like this
([0-9]{2}|[0-9]{3})$

then 216 correctly evaluates to True (& so does 16).
What I couldn't figure out is the logic behind the expression when it
is wrapped in brackets & a $ sign is appended at the end! Can someone
please explain me this? What more work does the edited
ValidationExpression do to make 216 evaluate to True?
I am aware that $ means the end of a string.

Ron

Check out the Expresso application.  Written in dot.net and has a GUI for
developing regex.  Lots of examples of expressions built in and it will
generate code in both C# and VB.Net.  Been using it since dot.net v.0.

LS- Hide quoted text -

- Show quoted text -

Sorry to say, friends, but I don't want an alternate/easier expression
or examples. Rather I would like to UNDERSTAND the LOGIC behind why

[0-9]{2}|[0-9]{3}

evaluates 216 to False & why

([0-9]{2}|[0-9]{3})$

evaluates 216 to True?

Thanks,

Ron
 
L

Lloyd Sheen

Using Regular Expression, I want to ensure that users enter either a 2-
digit or a 3-digit whole number in a TextBox. This is how I framed the
ValidationExpression in the RegularExpressionValidator:
---------------------------------------------------------------------------­-----
<asp:TextBox ID="txt1" runat="server"/>
<asp:RegularExpressionValidator ID="regexp1" ControlToValidate="txt1"
Display="dynamic" ErrorMessage="Invalid Text"
ValidationExpression="[0-9]{3}|[0-9]{2}" runat="server"/>
---------------------------------------------------------------------------­-----
Suppose a user enters 16 & 216 in the TextBox. As expected, both the
numbers return True but if I just reverse the ValidationExpression
i.e. change the ValidationExpression from
[0-9]{3}|[0-9]{2}
[0-9]{2}|[0-9]{3}

& then input 16 & 216 in the TextBox, 16 correctly evaluates to True
but 216 strangely evaluates to False!
After a plethora of trial & error methods, I realized that if the
second ValidationExpression (the one which evaluates 216 to False) is
enclosed in brackets & a $ sign is appended at the end of the
expression like this
([0-9]{2}|[0-9]{3})$

then 216 correctly evaluates to True (& so does 16).
What I couldn't figure out is the logic behind the expression when it
is wrapped in brackets & a $ sign is appended at the end! Can someone
please explain me this? What more work does the edited
ValidationExpression do to make 216 evaluate to True?
I am aware that $ means the end of a string.

Ron

Check out the Expresso application. Written in dot.net and has a GUI for
developing regex. Lots of examples of expressions built in and it will
generate code in both C# and VB.Net. Been using it since dot.net v.0.

LS- Hide quoted text -

- Show quoted text -

Sorry to say, friends, but I don't want an alternate/easier expression
or examples. Rather I would like to UNDERSTAND the LOGIC behind why

[0-9]{2}|[0-9]{3}

evaluates 216 to False & why

([0-9]{2}|[0-9]{3})$

evaluates 216 to True?

Thanks,

Ron

Ok using Expresso I see the following explanation:
' Imports System.Text.RegularExpressions

' Regular expression built for Visual Basic on: Sat, Mar 29, 2008, 04:16:52
PM
' Using Expresso Version: 3.0.2717, http://www.ultrapico.com
'
' A description of the regular expression:
'
' Select from 2 alternatives
' Any character in this class: [0-9], exactly 2 repetitions
' [0-9]{3}
' Any character in this class: [0-9], exactly 3 repetitions
' Return
' New line
'
'


([0-9]{2}|[0-9]{3})$


' Imports System.Text.RegularExpressions

' Regular expression built for Visual Basic on: Sat, Mar 29, 2008, 04:17:37
PM
' Using Expresso Version: 3.0.2717, http://www.ultrapico.com
'
' A description of the regular expression:
'
' [1]: A numbered capture group. [[0-9]{2}|[0-9]{3}]
' Select from 2 alternatives
' Any character in this class: [0-9], exactly 2 repetitions
' Any character in this class: [0-9], exactly 3 repetitions
' $
' End of line or string
' Return
' New line
'
'
Not sure if this is what you are looking for.

LS
 
J

Jesse Houwing

Hello RN1,
Using Regular Expression, I want to ensure that users enter either a
2- digit or a 3-digit whole number in a TextBox. This is how I framed
the ValidationExpression in the RegularExpressionValidator:

----------------------------------------------------------------------
----------
<asp:TextBox ID="txt1" runat="server"/>
<asp:RegularExpressionValidator ID="regexp1" ControlToValidate="txt1"
Display="dynamic" ErrorMessage="Invalid Text"
ValidationExpression="[0-9]{3}|[0-9]{2}" runat="server"/>
----------------------------------------------------------------------
----------
Suppose a user enters 16 & 216 in the TextBox. As expected, both the
numbers return True but if I just reverse the ValidationExpression
i.e. change the ValidationExpression from

[0-9]{3}|[0-9]{2}

to

[0-9]{2}|[0-9]{3}

& then input 16 & 216 in the TextBox, 16 correctly evaluates to True
but 216 strangely evaluates to False!

After a plethora of trial & error methods, I realized that if the
second ValidationExpression (the one which evaluates 216 to False) is
enclosed in brackets & a $ sign is appended at the end of the
expression like this

([0-9]{2}|[0-9]{3})$

then 216 correctly evaluates to True (& so does 16).

What I couldn't figure out is the logic behind the expression when it
is wrapped in brackets & a $ sign is appended at the end! Can someone
please explain me this? What more work does the edited
ValidationExpression do to make 216 evaluate to True?

I am aware that $ means the end of a string.


To start with, [0-9]{2,3} would be the sorter variant of your original expression,
but to explain why this isn't working as expected: The RegularExpressionValidator
puts a ^ and a $ around every expression, so the expression under test is
actually:

^[0-9]{2}|[0-9]{3}$

Which should be read as:

^[0-9]{2} or [0-9]{3}$

So: any string starting with 2 numbers or any string ending in two numbers.

([0-9]{2}|[0-9]{3})

Adding () solves this because that in turn expands to

^([0-9]{2}|[0-9]{3})$ or ^[0-9]{2}$|^[0-9]{3}$

The best solution is to make sure all your validation expressions are either
in (..), or ^..$.
 
R

RN1

Hello RN1,




Using Regular Expression, I want to ensure that users enter either a
2- digit or a 3-digit whole number in a TextBox. This is how I framed
the ValidationExpression in the RegularExpressionValidator:
----------------------------------------------------------------------
----------
<asp:TextBox ID="txt1" runat="server"/>
<asp:RegularExpressionValidator ID="regexp1" ControlToValidate="txt1"
Display="dynamic" ErrorMessage="Invalid Text"
ValidationExpression="[0-9]{3}|[0-9]{2}" runat="server"/>
----------------------------------------------------------------------
----------
Suppose a user enters 16 & 216 in the TextBox. As expected, both the
numbers return True but if I just reverse the ValidationExpression
i.e. change the ValidationExpression from
[0-9]{3}|[0-9]{2}
[0-9]{2}|[0-9]{3}

& then input 16 & 216 in the TextBox, 16 correctly evaluates to True
but 216 strangely evaluates to False!
After a plethora of trial & error methods, I realized that if the
second ValidationExpression (the one which evaluates 216 to False) is
enclosed in brackets & a $ sign is appended at the end of the
expression like this
([0-9]{2}|[0-9]{3})$

then 216 correctly evaluates to True (& so does 16).
What I couldn't figure out is the logic behind the expression when it
is wrapped in brackets & a $ sign is appended at the end! Can someone
please explain me this? What more work does the edited
ValidationExpression do to make 216 evaluate to True?
I am aware that $ means the end of a string.

To start with, [0-9]{2,3} would be the sorter variant of your original expression,
but to explain why this isn't working as expected: The RegularExpressionValidator
puts a ^ and a $ around every expression, so the expression under test is
actually:

^[0-9]{2}|[0-9]{3}$

Which should be read as:

^[0-9]{2} or [0-9]{3}$

So: any string starting with 2 numbers or any string ending in two numbers..

([0-9]{2}|[0-9]{3})

Adding () solves this because that in turn expands to

^([0-9]{2}|[0-9]{3})$ or ^[0-9]{2}$|^[0-9]{3}$

The best solution is to make sure all your validation expressions are either
in (..), or ^..$.

--
Jesse Houwing
jesse.houwing at sogeti.nl- Hide quoted text -

- Show quoted text -
So: any string starting with 2 numbers or any string ending >> in two numbers

Shouldn't that be "so any string starting with 2 numbers or any string
ending in *three* numbers"?

Ron
 
J

Jesse Houwing

Hello RN1,
Hello RN1,
Using Regular Expression, I want to ensure that users enter either a
2- digit or a 3-digit whole number in a TextBox. This is how I
framed the ValidationExpression in the RegularExpressionValidator:

--------------------------------------------------------------------
--
----------
<asp:TextBox ID="txt1" runat="server"/>
<asp:RegularExpressionValidator ID="regexp1"
ControlToValidate="txt1"
Display="dynamic" ErrorMessage="Invalid Text"
ValidationExpression="[0-9]{3}|[0-9]{2}" runat="server"/>
--------------------------------------------------------------------
--
----------
Suppose a user enters 16 & 216 in the TextBox. As expected, both the
numbers return True but if I just reverse the ValidationExpression
i.e. change the ValidationExpression from
[0-9]{3}|[0-9]{2}

to

[0-9]{2}|[0-9]{3}

& then input 16 & 216 in the TextBox, 16 correctly evaluates to True
but 216 strangely evaluates to False!

After a plethora of trial & error methods, I realized that if the
second ValidationExpression (the one which evaluates 216 to False)
is enclosed in brackets & a $ sign is appended at the end of the
expression like this

([0-9]{2}|[0-9]{3})$

then 216 correctly evaluates to True (& so does 16).

What I couldn't figure out is the logic behind the expression when
it is wrapped in brackets & a $ sign is appended at the end! Can
someone please explain me this? What more work does the edited
ValidationExpression do to make 216 evaluate to True?

I am aware that $ means the end of a string.
To start with, [0-9]{2,3} would be the sorter variant of your
original expression, but to explain why this isn't working as
expected: The RegularExpressionValidator puts a ^ and a $ around
every expression, so the expression under test is actually:

^[0-9]{2}|[0-9]{3}$

Which should be read as:

^[0-9]{2} or [0-9]{3}$

So: any string starting with 2 numbers or any string ending in two
numbers.

([0-9]{2}|[0-9]{3})

Adding () solves this because that in turn expands to

^([0-9]{2}|[0-9]{3})$ or ^[0-9]{2}$|^[0-9]{3}$

The best solution is to make sure all your validation expressions are
either in (..), or ^..$.

--
Jesse Houwing
jesse.houwing at sogeti.nl- Hide quoted text -
- Show quoted text -
So: any string starting with 2 numbers or any string ending >> in
two numbers
Shouldn't that be "so any string starting with 2 numbers or any string
ending in *three* numbers"?

Ron,

Thank you, you're completely right.
 
R

RN1

Hello RN1,




On Mar 31, 11:53 pm, Jesse Houwing <[email protected]>
wrote:
Hello RN1,
Using Regular Expression, I want to ensure that users enter either a
2- digit or a 3-digit whole number in a TextBox. This is how I
framed the ValidationExpression in the RegularExpressionValidator:
--------------------------------------------------------------------
--
----------
<asp:TextBox ID="txt1" runat="server"/>
<asp:RegularExpressionValidator ID="regexp1"
ControlToValidate="txt1"
Display="dynamic" ErrorMessage="Invalid Text"
ValidationExpression="[0-9]{3}|[0-9]{2}" runat="server"/>
--------------------------------------------------------------------
--
----------
Suppose a user enters 16 & 216 in the TextBox. As expected, both the
numbers return True but if I just reverse the ValidationExpression
i.e. change the ValidationExpression from
[0-9]{3}|[0-9]{2}
to
[0-9]{2}|[0-9]{3}
& then input 16 & 216 in the TextBox, 16 correctly evaluates to True
but 216 strangely evaluates to False!
After a plethora of trial & error methods, I realized that if the
second ValidationExpression (the one which evaluates 216 to False)
is enclosed in brackets & a $ sign is appended at the end of the
expression like this
([0-9]{2}|[0-9]{3})$
then 216 correctly evaluates to True (& so does 16).
What I couldn't figure out is the logic behind the expression when
it is wrapped in brackets & a $ sign is appended at the end! Can
someone please explain me this? What more work does the edited
ValidationExpression do to make 216 evaluate to True?
I am aware that $ means the end of a string.
To start with, [0-9]{2,3} would be the sorter variant of your
original expression, but to explain why this isn't working as
expected: The RegularExpressionValidator puts a ^ and a $ around
every expression, so the expression under test is actually:
^[0-9]{2}|[0-9]{3}$
Which should be read as:
^[0-9]{2} or [0-9]{3}$
So: any string starting with 2 numbers or any string ending in two
numbers.
([0-9]{2}|[0-9]{3})
Adding () solves this because that in turn expands to
^([0-9]{2}|[0-9]{3})$ or ^[0-9]{2}$|^[0-9]{3}$
The best solution is to make sure all your validation expressions are
either in (..), or ^..$.
--
Jesse Houwing
jesse.houwing at sogeti.nl- Hide quoted text -
- Show quoted text -
So: any string starting with 2 numbers or any string ending >> in
two numbers
Shouldn't that be "so any string starting with 2 numbers or any string
ending in *three* numbers"?

Ron,

Thank you, you're completely right.

--
Jesse Houwing
jesse.houwing at sogeti.nl- Hide quoted text -

- Show quoted text -
Which should be read as:
^[0-9]{2} or [0-9]{3}$
So: any string starting with 2 numbers or any string ending in three numbers

As you have pointed out, any string starting with two numbers or any
string ending with three numbers will evaluate to True. Now 16 is a
string starting with two numbers & hence evaluates to
True.....fine....but 216 is a string ending with three numbers; so why
does it evaluate to False?

This is getting a bit confusing....

Ron
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,053
Latest member
BrodieSola

Latest Threads

Top