On 8/1/07, Neil: esl-lounge.com neil@esl-lounge.com wrote:
Could someone help me with the regex syntax for disallowing underscores:
/**
- Verify the syntax of the given name.
*/ function user_validate_name($name) { if (!strlen($name)) return t('You must enter a username.'); if (substr($name, 0, 1) == ' ') return t('The username cannot begin with a space.'); if (substr($name, -1) == ' ') return t('The username cannot end with a space.'); if (strpos($name, ' ') !== FALSE) return t('The username cannot contain multiple spaces in a row.'); if (ereg("[^\x80-\xF7 [:alnum:]@_.-]", $name)) return t('The username contains an illegal character.'); if (preg_match('/[\x{80}-\x{A0}'. // Non-printable ISO-8859-1 + NBSP '\x{AD}'. // Soft-hyphen '\x{2000}-\x{200F}'. // Various space characters '\x{2028}-\x{202F}'. // Bidirectional text overrides '\x{205F}-\x{206F}'. // Various text hinting characters '\x{FEFF}'. // Byte order mark '\x{FF01}-\x{FF60}'. // Full-width latin '\x{FFF9}-\x{FFFD}'. // Replacement characters '\x{0}]/u', // NULL byte $name)) { return t('The username contains an illegal character.'); } if (strpos($name, '@') !== FALSE && !eregi('@([0-9a-z](-?[0-9a-z])*.)+[a-z]{2}([zmuvtg]|fo|me)?$', $name)) return t('The username is not a valid authentication ID.'); if (strlen($name) > USERNAME_MAX_LENGTH) return t('The username %name is too long: it must be %max characters or less.', array('%name' => $name, '%max' => USERNAME_MAX_LENGTH)); }
what do all the Xxxxx characters signify? Also this line:
They are hex Unicode character codes
if (ereg("[^\x80-\xF7 [:alnum:]@_.-]", $name)) return t('The username contains an illegal character.');
seems to be disallowing @, underscore, period and hyphen...or is it allowing them? Regular expressions were never my forte!
Neither mine. I think that one says that names can't begin (^) with these characters. In the absence of better advice, I would change something that I understand, for example I would copy and adapt the if (strpos($name, ' ') !== FALSE) line which checks for double spaces.
Neil
----- Original Message ----- From: "Cog Rusty" cog.rusty@gmail.com To: support@drupal.org Sent: Wednesday, August 01, 2007 6:25 PM Subject: Re: [support] getting the underscore to be unusable in user names
Probably. I don't know if underscores would accept escaping with a backslash (_) in that field. You could try it.
On 8/1/07, Neil: esl-lounge.com neil@esl-lounge.com wrote:
Ah! I'd been reading your previous answer trying to work out its mystic meaning. :-)
So I can't use Access Control to prevent underscores? Looks like I'll have to look more closely at the other earlier responses to my question.
----- Original Message ----- From: "Cog Rusty" cog.rusty@gmail.com To: support@drupal.org Sent: Wednesday, August 01, 2007 6:09 PM Subject: Re: [support] getting the underscore to be unusable in user names
On 8/1/07, Cog Rusty cog.rusty@gmail.com wrote:
On 8/1/07, Neil: esl-lounge.com neil@esl-lounge.com wrote:
I found a post on drupal.org that said you could do all of this via Access Rules.
So I went there and entered the following three rules to outlaw underscores
_% - deny/username %_ - deny/username %_% - deny/username
.....and found myself and every other username blocked from the site, unable to log in without getting a "this username has been reserved" error message. Totally frozen out of the site, I had to go into phpmyadmin and get rid of those three entries from the "access" table. Have I ignored something glaringly obvious with those deny rules?
You probably know by now. Those rules for forbidding access can do what you want but that is just a bonus. Their main function is to forbid access to anyone with such a username. Good idea for a new site though.
Oops! I just noticed you said "every" user. Underscore is a wildcard for any single character. -- [ Drupal support list | http://lists.drupal.org/ ]
-- [ Drupal support list | http://lists.drupal.org/ ]
-- [ Drupal support list | http://lists.drupal.org/ ]
-- [ Drupal support list | http://lists.drupal.org/ ]