2010-07-21 8 views
1

J'essaie de valider une URL de twitter, de sorte qu'elle contienne au moins un nom d'utilisateur. Je m'en fiche si ça existe ou pas, juste qu'il y en a un.Valider twitter URL

J'utilise le javascript ci-dessous regex

var re = new RegExp('((http://)|(www\.))twitter\.com/(\w+)'); 
alert(re.test('http://twitter.com/test_user')); 

mais il ne fonctionne pas.

La chose étrange est que j'ai créé et testé l'expression rationnelle ci-dessus à l'adresse

http://www.regular-expressions.info/javascriptexample.html

où il fonctionne très bien.

Des idées?

Merci

Répondre

0

Vous devez les backslashs dans les séquences d'échappement trop:

var re = new RegExp('((http://)|(www\\.))twitter\\.com/(\\w+)'); 

et je recommande cette expression régulière:

new RegExp('^(?:http://)?(?:www\\.)?twitter\\.com/(\\w+)$', 'i') 
+0

Merci à tous pour la clarification Très apprécié – Thomas

0

Il est à cause de la façon dont vous » re définissant l'expression régulière en utilisant un littéral de chaîne. Vous devez échapper aux caractères d'échappement (double barre oblique inverse):

'^(http://)?(www\.)?twitter\.com/(\\w+)' 

Dans ce qui précède, j'ai aussi changé le début afin qu'il corresponde http://www.twitter.com/test_user.

Vous pouvez également utiliser la syntaxe RegExp littérale, bien que cela signifie que vous devez échapper /:

var re = /^http:\/\/)?(www\.)?twitter\.com\/(\w+)/; 
0

-http: //twitter.com/username (ce qui est http) -https: // twitter .com/nom d'utilisateur (ce qui est https) -twitter.com/username (sans http) - @ nom d'utilisateur (avec @) -username (sans @)

var username = "@test"; 
    var r1 = new RegExp('^((?:http://)?|(?:https://)?)?(?:www\\.)?twitter\\.com/(\\w+)$', 'i'); 
      if (r1.test(username) == false) { 
       var r2 = new RegExp('^@?(\\w+)$', 'j'); 
       if (r2.test(username) == true) 
        return true; 
       else 
        return false; 
      } else { 
       return true; 
      } 
1
function isTwitterHandle(handle) { 
    if (handle.match(/^((?:http:\/\/)?|(?:https:\/\/)?)?(?:www\.)?twitter\.com\/(\w+)$/i) || handle.match(/^@?(\w+)$/)) return true; 
    return false; 
} 
+0

Cela peut être la bonne solution, mais je pense qu'une petite explication du code serait bonne pour une meilleure compréhension. –