Question

Je travaille sur un forum de discussion AJAX / PHP et je suis actuellement coincé sur le regex pour détecter si un utilisateur a envoyer un PM et puis travailler à qui il est trop et ce que le message est.

Si l'utilisateur tape quelque chose comme

  

/ h PezCuckow Salut à vous tellement génial!

Je voudrais d'abord tester si ma chaîne correspond ce modèle puis get « PezCuckow » et 'Salut à vous tellement génial! comme des chaînes d'afficher au PHP.

Je l'ai fait des recherches sur regex mais ont vraiment aucune idée où commencer avec celui-ci! Pouvez-vous aider?

== Merci à aider ce everyones est maintenant résolu! ==

var reg = /^\/pm\s+(\w+)\s+(.*)$/i;
var to = "";

if(message.match(reg)) {
    m = message.match(reg);
    to = m[1];
    message = m[2];
}
Était-ce utile?

La solution

Hows à ce sujet:

var reg = /^\/pm\s+(\w+)\s+(.*)$/i,
    m = '/pm PezCuckow Hi There you so awesome!'.match(reg);

m[0]; // "PezCuckow"
m[1]; // "Hi There you so awesome!"

qui correspond à "/pm" suivis par " " espaces (accepter généreusement des espaces supplémentaires), suivi du \w+ nom d'utilisateur, suivi par des espaces " " Agin, puis enfin le .* de message (qui est essentiellement tout à la fin de la ligne).

Autres conseils

regex un message parse:

^(?:\s*/(\w+)\s*(\w*)\s*)?((?:.|[\r\n])*)$

Explication:

^              # start-of-string
(?:            # start of non-capturing group
  \s*/         #   a "/", preceding whitespace allowed
  (\w+)        #   match group 1: any word character, at least once (e.g. option)
  \s+          #   delimiting white space
  (\w*)        #   match group 2: any word character (e.g. target user)
  \s+          #   delimiting white space
)?             # make the whole thing optional
(              # match group 3:
  (?:          #   start of non-capturing group, either
    .          #     any character (does not include newlines)
    |          #     or
    [\r\n]     #     newline charaters
  )*           #   repeat as often as possible
)              # end match group 3

Dans votre cas ("/pm PezCuckow Hi There you so awesome!"):

  • Groupe 1: "h"
  • Groupe 2: "PezCuckow"
  • Groupe 3: "Salut à vous si impressionnant"

dans un cas plus général ("Hi There you so awesome!")

  • Groupe 1: ""
  • Groupe 2: ""
  • Groupe 3: "Salut à vous si impressionnant"

Notez que la barre oblique doit être échappé en JavaScript regex littérales:

/foo\/bar/

mais pas dans les modèles regex en général.

Si l'on suppose que les caractères seulement de mots (sans espaces, etc.) sont valables dans le champ Nom, ça va faire ce que vous voulez:

var re = /(\/\w+) (\w+) (.+)/;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top