Sort:  

Sure. But here's a solution in Perl with very few headaches. I can also write it in C++, C, Python or Javascript rather painlessly. I can write it in any other language you prefer with a little bit of reference work.

@split = split(/\./, $username);
$l = length($username);
if ($l > 16) { return 0; }
else {
    foreach $seg (@split) {
       if (($seg =~ /-/) && ($seg !~ /\b\-*\b/)) {
          return 0;
      }
       elsif ($seg !~ /^[a-z0-9][a-z0-9\-]+[a-z0-9]+$/) {
          return 0;
       }
       else {
          return 1;
       }
    }
}