Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Perl Misc (http://www.velocityreviews.com/forums/f67-perl-misc.html)
-   -   Regular expression help (http://www.velocityreviews.com/forums/t911441-regular-expression-help.html)

Jon Combe 09-24-2009 12:52 PM

Regular expression help
 
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.

Peter Makholm 09-24-2009 01:15 PM

Re: Regular expression help
 
Jon Combe <jcombe@gmail.com> writes:

> 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

Jon Combe 09-24-2009 03:24 PM

Re: Regular expression help
 
> 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.


All times are GMT. The time now is 10:43 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.