Regular expression help

Discussion in 'Perl Misc' started by Jon Combe, Sep 24, 2009.

  1. Jon Combe

    Jon Combe Guest

    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.
     
    Jon Combe, Sep 24, 2009
    #1
    1. Advertisements

  2. 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
     
    Peter Makholm, Sep 24, 2009
    #2
    1. Advertisements

  3. Jon Combe

    Jon Combe Guest

    You can do it with a lot of look-ahead assertions:
    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.
     
    Jon Combe, Sep 24, 2009
    #3
    1. Advertisements

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 (here). After that, you can post your question and our members will help you out.