<?php
function validate_username( $username ) {
// Enforce that username has to be 3-100 characters, alphanumeric, and first character a letter.
// Possibility without begin/end characters and i: [a-z][a-z0-9@.+-_]{2,100}
// Allow for simple email usernames in the future...
return !! preg_match ( '#^[a-zA-Z][a-zA-Z0-9@.+-_]{2,100}$#' , trim ( $username ) ) ; // Note the regex string is single quoted. }
$good_test_cases = array ( 'good' ,
'AllUppercase' ,
'AllLowercase' ,
'username23434' ,
'jsherman@shermanbrothers.com' ,
'bobz' ,
'william' ,
'testzor' ,
'William' ,
'WiLiAm' ,
'Herkamer' ,
'test@example.com' ,
'will@iam.net' ,
'roy-ronalds@gmail.com' ,
'roy.ronalds@gmail.com' ,
'roy+ronalds@gmail.com' ,
'roy_ronalds@gmail.com' ,
'roy_ron_alds@gmail.com'
) ;
$false_test_cases = array ( 'ba*d' ,
'Mark%twain' ,
'\'apos' ,
'apos\'' ,
'quo"tes' ,
'angle<bracket' ,
'angle>bracket' ,
'html<script>inside' ,
'!username' ,
'6farsi' ,
'$%^$%' ,
'O\'Brian'
) ;
// These should pass.
foreach ( $good_test_cases as $value ) {
assert ( validate_username
( $value ) ) ; }
// These should pass (but not all of them do)
foreach ( $false_test_cases as $val ) {
}
?>
PD9waHAKCmZ1bmN0aW9uIHZhbGlkYXRlX3VzZXJuYW1lKCR1c2VybmFtZSl7CgkvLyBFbmZvcmNlIHRoYXQgdXNlcm5hbWUgaGFzIHRvIGJlIDMtMTAwIGNoYXJhY3RlcnMsIGFscGhhbnVtZXJpYywgYW5kIGZpcnN0IGNoYXJhY3RlciBhIGxldHRlci4KCS8vIFBvc3NpYmlsaXR5IHdpdGhvdXQgYmVnaW4vZW5kIGNoYXJhY3RlcnMgYW5kIGk6IFthLXpdW2EtejAtOUAuKy1fXXsyLDEwMH0KCS8vIEFsbG93IGZvciBzaW1wbGUgZW1haWwgdXNlcm5hbWVzIGluIHRoZSBmdXR1cmUuLi4KCXJldHVybiAhIXByZWdfbWF0Y2goJyNeW2EtekEtWl1bYS16QS1aMC05QC4rLV9dezIsMTAwfSQjJywgdHJpbSgkdXNlcm5hbWUpKTsgLy8gTm90ZSB0aGUgcmVnZXggc3RyaW5nIGlzIHNpbmdsZSBxdW90ZWQuCn0KCgoKJGdvb2RfdGVzdF9jYXNlcyA9IGFycmF5KAonZ29vZCcsCidBbGxVcHBlcmNhc2UnLAonQWxsTG93ZXJjYXNlJywKJ3VzZXJuYW1lMjM0MzQnLAonanNoZXJtYW5Ac2hlcm1hbmJyb3RoZXJzLmNvbScsCidib2J6JywKJ3dpbGxpYW0nLAondGVzdHpvcicsCidXaWxsaWFtJywKJ1dpTGlBbScsCidIZXJrYW1lcicsCid0ZXN0QGV4YW1wbGUuY29tJywKJ3dpbGxAaWFtLm5ldCcsCidyb3ktcm9uYWxkc0BnbWFpbC5jb20nLAoncm95LnJvbmFsZHNAZ21haWwuY29tJywKJ3JveStyb25hbGRzQGdtYWlsLmNvbScsCidyb3lfcm9uYWxkc0BnbWFpbC5jb20nLAoncm95X3Jvbl9hbGRzQGdtYWlsLmNvbScKKTsKCgoJCiRmYWxzZV90ZXN0X2Nhc2VzID0gYXJyYXkoCidiYSpkJywKJ01hcmsldHdhaW4nLAonXCdhcG9zJywKJ2Fwb3NcJycsCidxdW8idGVzJywKJ2FuZ2xlPGJyYWNrZXQnLAonYW5nbGU+YnJhY2tldCcsCidodG1sPHNjcmlwdD5pbnNpZGUnLAonIXVzZXJuYW1lJywKJzZmYXJzaScsCickJV4kJScsCidPXCdCcmlhbicKCSk7CgkKLy8gVGhlc2Ugc2hvdWxkIHBhc3MuCmZvcmVhY2goJGdvb2RfdGVzdF9jYXNlcyBhcyAkdmFsdWUpewoJYXNzZXJ0KHZhbGlkYXRlX3VzZXJuYW1lKCR2YWx1ZSkpOwp9CgovLyBUaGVzZSBzaG91bGQgcGFzcyAoYnV0IG5vdCBhbGwgb2YgdGhlbSBkbykKZm9yZWFjaCgkZmFsc2VfdGVzdF9jYXNlcyBhcyAkdmFsKXsKCWFzc2VydCgiIXZhbGlkYXRlX3VzZXJuYW1lKCciLmFkZHNsYXNoZXMoJHZhbCkuIicpIik7Cn0KPz4=