Hi Monks,

a colleague of mine came to me with a question on a special regex which has to decide whether a given pw is valid or not. The pw has to suffice the following restrictions:

I agreed to him that this requirement isn't trivial. But on the other side I told him that i could imagine a really short solution. Perhaps i leaned out of the window a bit too wide, because after a little fiddling i got this:

#!/usr/bin/perl -w # vim: set tabstop=3 use strict; while (<DATA>) { chomp; print "\n$_\n"; length() < 5 && do { print "too short\n"; next }; length() > 8 && do { print "too long\n"; next }; m# ^ \w*[a-z]\w*[A-Z]\w*[0-9]\w*| \w*[a-z]\w*[0-9]\w*[A-Z]\w*| \w*[A-Z]\w*[a-z]\w*[0-9]\w*| \w*[A-Z]\w*[0-9]\w*[a-z]\w*| \w*[0-9]\w*[A-Z]\w*[a-z]\w*| \w*[0-9]\w*[a-z]\w*[A-Z]\w* $ #x ? print "valid\n" : print "invalid (Input must have at least one lowercase-, " . "one uppercase-Char and one Number! (f.i.: \'12Three +\')\n"; } __DATA__ 1245Za78 1245Za7b8 45a7b8 a78Z 12Three kMdlOz 6KYX diImMU1Y ZNw4uWSht jDqvSN qVRR le2WTQv us1j3SerC OZv0LtSJ 9qyscg LbX7o74 80TeRHq 7YIiXnEV8 e1Yctl9 8iGoc R87MeDCFz ziTnlk cziP

This solution is quite good but appears a little bulky to me. Especially a more compact regex would be nice. Perhaps the length-validation could be made within the regex too.

I wonder who has THE solution which combines shortness and elegance in a tremendous way ;)

regards, tos

janitored by ybiC: Balanced <readmore> tags, minor format cleanup for legibility


In reply to regex elegance contest - validate a pw by tos

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.