Regular expression help

J

Jon Combe

I realise this is not the ideal group, because there doesn't seem to
be a regular expressions group but since most Perl developers use
regular expressions I'm hoping someone will know! I use regular
expressions a lot but I have come accross a request that has me
stumped. The following needs to be done in a single regular
expression:-

Validate length to a minimum and maximum number of characters
Must contain at least one vowel
Must not contain any numbers
Must contain no more than 2 adjacent repeated characters (so aa is OK,
but aaa is not)

I can write a single regular expression to do 2 of those but I cannot
come up with a single regular expression to do all 4. Is it actually
possible? I realise it could easily be done with several expressions
and an "and" statement (and probably faster too), but this needs to be
plugged in to an application that accepts only a single regular
expression.

Thanks.
Jon.
 
P

Peter Makholm

Jon Combe said:
Validate length to a minimum and maximum number of characters
Must contain at least one vowel
Must not contain any numbers
Must contain no more than 2 adjacent repeated characters (so aa is OK,
but aaa is not)

You can do it with a lot of look-ahead assertions:

/
^
(?= .* [aeiouy] ) # At least one vowel
(?! .* [0-9] ) # Does not contain number
(?! .* (\w)\1\1 ) # no more than 2 adjacent repeated characters
.{5,8} # Between 5 and 8 chars
$
/x

But the variant of regular expressions your application is using must
have both positive and negative lookaheads for this to work.

//Makholm
 
J

Jon Combe

You can do it with a lot of look-ahead assertions:
/
  ^
    (?= .* [aeiouy] )  # At least one vowel
    (?! .* [0-9] )     # Does not contain number
    (?! .* (\w)\1\1 )  # no more than 2 adjacent repeated characters
    .{5,8}             # Between 5 and 8 chars
  $
/x

But the variant of regular expressions your application is using must
have both positive and negative lookaheads for this to work.

//Makholm

Thank you so much Makholm that does exactly what I want. I was already
starting to use look ahead but for the no more than 2 adjacent
repeated characters I was getting in a mess trying to use look behind
assertions which obviously aren't needed.

Jon.
 

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,969
Messages
2,570,161
Members
46,710
Latest member
bernietqt

Latest Threads

Top