Password Regular Expression

S

Stirling

Hi all,
hope someone can help me,

I am looking to do a password validation check using client side
validation. Minimum requirement is that it must contain at least one
number and one letter. (Ideally it would be of 6-20 characters in
length but first things first).

I have came up with the following regEx

^(\w*(?=\w+\d+)(?=\w*[a-zA-Z])\w*)$

This works fine in IE but when testing it using NS6 it won't validate
'1password', but will validate 'password1'. It seems the first forward
search is consuming the first character in NS, would this be correct,
and if so can anybody suggest either a way arround this or a different
regular expression,

Thanks in advance,

SJM.
 
E

Evertjan.

Stirling wrote on 15 mei 2004 in comp.lang.javascript:
I am looking to do a password validation check using client side
validation. Minimum requirement is that it must contain at least one
number and one letter. (Ideally it would be of 6-20 characters in
length but first things first).

I have came up with the following regEx

^(\w*(?=\w+\d+)(?=\w*[a-zA-Z])\w*)$

This works fine in IE but when testing it using NS6 it won't validate
'1password', but will validate 'password1'. It seems the first forward
search is consuming the first character in NS, would this be correct,
and if so can anybody suggest either a way arround this or a different
regular expression,

function pwTest(w){
t1 = /^[a-z\d]{6,20}$/i // only and length
t2 = /[a-z]/i // at least 1 letter
t3 = /\d/ // at least 1 number

return t1.test(w) && t2.test(w) && t3.test(w)
}


alert(pwTest("1qweqweasd"))
 
I

Ivo

I am looking to do a password validation check using client side
validation. Minimum requirement is that it must contain at least one
number and one letter. (Ideally it would be of 6-20 characters in
length but first things first).
<snip>

Lookahead regexes are not very widely supported. Look at this:

var pword='djuhy9dgyg';
alert( /[a-z]/i.test( pword ) && /\d/.test( pword ) && /.{6,20}/.test(
pword ) )
// alerts true or false

Three little regexes may not be the most efficient way, but would be fast
enough for me.
Ivo
 
L

Lasse Reichstein Nielsen

Stirling said:
I am looking to do a password validation check using client side
validation. Minimum requirement is that it must contain at least one
number and one letter.
I have came up with the following regEx

^(\w*(?=\w+\d+)(?=\w*[a-zA-Z])\w*)$

The matches a sequence of word-characters (a requirement you didn't
mention?) that contains at least one digit(!) after a word character,
and at least one letter. The reason you don't match "1password" is
the first + in (?=\w+\d+).

A simpler version could be:
/^(?=\w*\d)(?=\w*[A-Z])\w{6,20}$/i

Still, you are relying on lookahead, which only exists in newer
browsers, and which IIRC is broken in IE. In many cases, making
more than one test is much simpler than trying to encode everything
into one RegExp.

function testPasswd(pw) {
return /[a-z]/i.test(pw) && /\d/.test(pw) && /^\w{6,20}*$/.test(pw);
}
This works fine in IE but when testing it using NS6 it won't validate
'1password', but will validate 'password1'.

That supports my recollection that lookahead in IE is broken, because
it should not match "1password".
It seems the first forward search is consuming the first character
in NS, would this be correct,

Yes, because you asked it to.

/L
 
S

Stirling

Evertjan. said:
Stirling wrote on 15 mei 2004 in comp.lang.javascript:

I am looking to do a password validation check using client side
validation. Minimum requirement is that it must contain at least one
number and one letter. (Ideally it would be of 6-20 characters in
length but first things first).

I have came up with the following regEx

^(\w*(?=\w+\d+)(?=\w*[a-zA-Z])\w*)$

This works fine in IE but when testing it using NS6 it won't validate
'1password', but will validate 'password1'. It seems the first forward
search is consuming the first character in NS, would this be correct,
and if so can anybody suggest either a way arround this or a different
regular expression,


function pwTest(w){
t1 = /^[a-z\d]{6,20}$/i // only and length
t2 = /[a-z]/i // at least 1 letter
t3 = /\d/ // at least 1 number

return t1.test(w) && t2.test(w) && t3.test(w)
}


alert(pwTest("1qweqweasd"))
My problem is that I am using ASP.net validation, so it must consist of
a singe validation expression. Is there any other way of doing this
sirt of thing with a single expression without looking forward?

SJM.
 
S

Stirling

Richard said:
It does seem unlikely that ASP-net would impose such an arbitrary
restriction, but an expression could be a function call or a function
expression (that was called as - (function(){ ... })() -) so even with
this restriction there would be no limit on the amount of javascript
executed to resolve one expression.

Richard.
What I am using is the Validation controls which are part of the ASP.net
framework (actullay I'm using a modified version called the
DOMValidators.) These controls attach to a Textbox, and allow a regular
expression match against the text box. Yes it is limiting, but it
reduces the amount of javascript that needs coded quite a lot. So I'm
stuck with using a single validation string.

S.
 
E

Evertjan.

Stirling wrote on 16 mei 2004 in comp.lang.javascript:
function pwTest(w){
t1 = /^[a-z\d]{6,20}$/i // only and length
t2 = /[a-z]/i // at least 1 letter
t3 = /\d/ // at least 1 number

return t1.test(w) && t2.test(w) && t3.test(w)
}


alert(pwTest("1qweqweasd"))
My problem is that I am using ASP.net validation, so it must consist of
a singe validation expression. Is there any other way of doing this
sirt of thing with a single expression without looking forward?

This once more convinces me to stick to classical ASP.

Either you are wrong or ASP-net stinks.
 
R

Richard Cornford

Evertjan. said:
Stirling wrote:

This once more convinces me to stick to classical ASP.

Either you are wrong or ASP-net stinks.

It does seem unlikely that ASP-net would impose such an arbitrary
restriction, but an expression could be a function call or a function
expression (that was called as - (function(){ ... })() -) so even with
this restriction there would be no limit on the amount of javascript
executed to resolve one expression.

Richard.
 
J

Jim Ley

It does seem unlikely that ASP-net would impose such an arbitrary
restriction,

It's entirely possible ASP.NET webforms stink, no seriously, they
really stink. They are almost certainly the worst thing ever to come
out of Microsoft.
but an expression could be a function call or a function
expression (that was called as - (function(){ ... })() -) so even with
this restriction there would be no limit on the amount of javascript
executed to resolve one expression.

True, but stop shining the shite, there's no way it'll be worth it.

Jim.
 
R

Richard Cornford

Jim said:
It's entirely possible ASP.NET webforms stink, no seriously,
they really stink. They are almost certainly the worst thing
ever to come out of Microsoft.
<snip>

I am not sure why I gave Microsoft credit for not being that stupid,
they demonstrate monumental incompetence on occasions, like the fact
that I have to use a Mozilla/Gecko browser when I visit the MSDN site
because they cannot cope with the configurability of their own (IE6)
browser.

Richard.
 

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

Forum statistics

Threads
473,995
Messages
2,570,236
Members
46,822
Latest member
israfaceZa

Latest Threads

Top