In case anyone is interested, I timed four of the solutions with
one sample of valid test data, as shown below.

use strict;
use Benchmark;
my $x = 'aBc123xyz';
sub make {
local $_=$x; return
/^[-\w]{6,14}$/ && /[0-9]/ && /[a-z]/ && /[A-Z]/;
}
sub sec {
local $_=$x; return
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[\w-]{6,14}$/;
}
sub abi {
  local $_=$x; return
  /^(?=.{6})             # At least 6 characters long.
    (?=.*[a-z])          # Contains a lowercase letter.
    (?=.*[A-Z])          # Contains an uppercase letter.
    (?=.*[0-9])          # Contains a digit.
    (?!.*[^-\w])         # Doesn't contain an invalid char.
    (?!.{15})            # Doesn't contain 15 characters.
  /xs;
}
sub andy {
  local $_=$x; return
     length() > 5        # At least 6 characters long.
  && tr/a-z//            # Contains a lowercase letter.
  && tr/A-Z//            # Contains an uppercase letter.
  && tr/0-9//            # Contains a digit.
  && !tr/-_a-zA-Z0-9//c  # Doesn't contain an invalid char.
  && length() < 15       # Doesn't contain 15 characters.
  ;
}
timethese(5000000, {
    'make' => \&make,
    'sec'  => \&sec,
    'abi'  => \&abi,
    'andy' => \&andy,
});

Perl 5.8.0 Results:
  abi: 107 wallclock secs (106.05 usr +  0.07 sys = 106.12 CPU)
 andy: 76 wallclock secs (76.60 usr +  0.02 sys = 76.62 CPU)
 make: 92 wallclock secs (91.19 usr +  0.02 sys = 91.21 CPU)
  sec: 117 wallclock secs (116.59 usr +  0.03 sys = 116.62 CPU)

/-\


http://mobile.yahoo.com.au - Yahoo! Mobile
- Exchange IMs with Messenger friends on your Telstra or Vodafone mobile phone.

Reply via email to