Comment valider un nom D'utilisateur Twitter en utilisant Regex

j'ai utilisé le patron /[a-z0-9_]+/i dans la fonction:

function validate_twitter($username) {
 if (eregi('/[a-z0-9_]+/i', $username)) {
  return true;
 }
}

avec ceci, je teste si l'entrée est un nom d'utilisateur twitter VALIDE, mais j'ai des difficultés car il ne me donne pas un résultat valide.

quelqu'un Peut-il m'aider à trouver une solution.

19
demandé sur Bo Persson 2010-12-13 00:36:56

6 réponses

Pour valider si une chaîne est valide poignée Twitter:

function validate_username($username)
{
    return preg_match('/^[A-Za-z0-9_]{1,15}$/', $username);
}

Si vous essayez de faire correspondre @username à l'intérieur d'une chaîne.

Par exemple: RT @username: lorem ipsum @cjoudrey etc...

utilisez ce qui suit:

$string = 'RT @username: lorem ipsum @cjoudrey etc...';
preg_match_all('/@([A-Za-z0-9_]{1,15})/', $string, $usernames);
print_r($usernames);

Vous pouvez utiliser ce dernier avec preg_replace_callback pour lier les noms d'utilisateurs dans une chaîne.

Edit: Twitter also open source bibliothèques de texte pour Java et Ruby pour la mise en correspondance des noms d'utilisateur, les balises de hachage, etc.. Vous pourriez probablement regarder dans le code et de trouver les modèles regex qu'ils utilisent.

Edit (2): Voici un PHP port de le Twitter de la Bibliothèque de Texte: https://github.com/mzsanford/twitter-text-php#readme

36
répondu Christian Joudrey 2012-12-12 20:21:24

Ne pas utiliser /ereg*.

en fait, n'utilisez pas ereg* si vous pouvez l'éviter. http://php.net/preg_match

modifier: Notez aussi que /[a-z0-9_]+/i match spaces are invalid et not-a-real-name. Vous voudrez certainement /^[a-z0-9_]+$/i.

S

3
répondu scoates 2010-12-12 21:46:46

je crois que vous êtes en utilisant le PCRE forme, dans ce cas, vous devriez être en utilisant le preg_match fonction à la place.

2
répondu mdarwi 2010-12-12 21:40:29

eregi() ne pas attendre tout / ou des toggles supplémentaires. Suffit d'utiliser eregi('[a-z0-9_]+')

2
répondu Mario 2010-12-12 21:41:06

votre expression régulière est valide, bien qu'elle permette des espaces FYI. (Si vous voulez tester les expressions régulières, je recommande: http://rubular.com/).

Le premier problème ici est votre emploi de eregi qui est dépréciée à partir de PHP 5.3. Il est recommandé que vous utilisez preg_match au lieu de cela, il a la même syntaxe. Essayez ça et voyez si ça aide.

Documentation PHP pour preg_match: http://www.php.net/manual/en/function.preg-match.php Documentation PHP pour eregi:http://php.net/manual/en/function.eregi.php

2
répondu Austin Lin 2010-12-12 21:44:09

les noms D'utilisateurs de Twitter ont de 1 à 15 caractères... donc, cela pourrait être encore mieux avec /^[a-z0-9_]{1,15}$/i.

2
répondu Cotta 2011-09-29 05:12:01