2011-02-27 3 views
1

Bonjour à tous et merci d'avoir pris le temps d'y jeter un coup d'œil.Vérifiez la chaîne pour les mots commençant par le caractère @

Je travaille sur un système de commentaire et au lieu d'utiliser des commentaires imbriqués, je veux juste ajouter la méthode @user pour les réponses.

Alors disons par exemple j'entre ce commentaire:

@moonwalker: Thanks again for your reply. 

Je suis à la recherche d'une fonction pour vérifier si un mot commence avec le caractère @ et après que le changement de mot dans un lien. Le problème que je suis face est que les gens vont utiliser des choses comme:

@moonwalker: rest of the message 

@moonwalker, rest of the message 

@moonwalker rest of the message 

ou même utiliser en adresse e-mail dans leurs commentaires.

Existe-t-il un moyen simple d'y parvenir? Preg_match peut-être?

Merci d'avance pour votre aide.

+1

J'imagine que j'utilise preg_match et que je trouve également la correspondance la plus longue qui correspond réellement à un nom d'utilisateur dans la base de données. Pour éviter les interférences de la part des e-mails, n'autorisez pas un caractère avant le @ –

+0

Je ne connais pas PHP mais si vous avez un support pour les expressions régulières, vous pouvez utiliser un regEx comme '^ @ (w /) * $'. Cela correspondrait à une chaîne commençant par un '@', puis n'importe quel nombre de caractères [AZ 0-9], alors vous pourriez utiliser la chaîne renvoyée par n'importe quelle fonction que vous utilisez pour faire ce que vous voulez avec elle comme le transformer en un lien . Est ce que ça aide? –

+0

Découvrez quelques-uns des [outils regex] (http://stackoverflow.com/questions/89718/is-there-anything-like-regexbuddy-in-the-open-source-world) qui pourraient vous aider à tester ou concevoir une expression preg_match. – mario

Répondre

2

Essayez cette fonction:

preg_replace('/(@\w+)/', '<a href=\'#\'>\1</a>', $comment); 
+0

Merci un million. Cela a bien fonctionné, mais il a également fait un lien de la dernière partie d'une adresse e-mail. Je vais essayer de mettre à jour votre code. :) – moonwalker

+1

exige que le caractère avant le @ soit quelque chose d'autre que a-z ou 0-9 et vous devriez être à l'abri des adresses e-mail. –

+0

hmm ... regex n'est absolument pas ma spécialité. J'ai tout essayé, mais rien ne marche si loin. Je vais choisir cette réponse comme réponse acceptée, mais j'ai toujours besoin de désactiver les adresses e-mail. Merci à tous pour votre aide. – moonwalker

3

Vous pouvez utiliser preg_match. Je ne l'ai pas testé, mais je suppose que ce serait quelque chose comme:

preg_match("/^\@/", $message) 

Cependant, je vous conseille fortement de reconsidérer le protocole. Il est préférable d'ajouter des caractères non imprimables et plus d'un octet. Par exemple, un stub comme "0x1 0x12 0x03 0x07".

+0

Merci pour la réponse. Votre preg_match ne fonctionne malheureusement pas. Pouvez-vous s'il vous plaît me fournir plus d'explications sur les caractères non imprimables? Merci! – moonwalker

+0

désolé à ce sujet, la chose est que pour écrire un reg, vous devez l'essayer. Je suppose que je pourrais manquer la correspondance de texte de repos, comme "/^\ @ \ w +" peut-être. – Spyros

+0

effectivement, je n'ai pas compris que c'est une mise en œuvre comme Twitter, je pensais que vous parliez du protocole de communication. Les caractères imprimables ne s'appliquent donc pas ici. – Spyros

Questions connexes