J'ai un problème de regex. J'ai cette expression :
/(https|http):\/\/(kwagmire)\.(com)\/(embed)\/([a-zA-Z0-9]+)/i
et ceci capture correctement sur https://regexr.com mais avec Ruby on Rails, tout ce qui comporte
http://kwagmire.com/embed/1QgJVmCam
renvoie une valeur vraie, je pense que c'est parce qu'il la définit avec la fonction global
drapeau que je ne veux pas.
J'ai essayé match
y scan
mais le même renvoie une valeur vraie si le lien est vu. Je veux juste que ce soit spécifique.
https://kwagmire.com/embed/1QgJVmCam < I want to return success this one is ok when testing on console
http://kwagmire.com/embed/1QgJVmCam < I want to return success also this on returns good
https.evil.com/http://jsitor.com/embed/1QgJVmCam < I want to return fail or nil, this one passes returns all match
facebook.com < I want to return fail or nil this one is good because it's failing
https://google.com < I want to return fail or nil also this good failed
www.twitter.com < I want to return fail or nil
http://kwagmire.com/embed/1QgJVmCam/?onload(alert('asdfadsf')) < I want to return fail or nil, this one also is failing, good
http://kwagmire.com/embed/1QgJVmCam/ onload(alert('asdfadsf')) < I want to return fail or nil, this one returns match too but should fail
http://kwagmire.com/embed/1QgJVmCam/?onload(alert('asdfadsf')) < I want to return fail or nil, this one returns match too, this should fail
En gros, je veux ceci https://kwagmire.com/embed/1QgJVmCam
tout le reste devrait retourner nil ou false. y a-t-il un moyen simple sans boucle ? Je pense que la solution est d'enlever l'indicateur global ou g
mais avez-vous cette option ? Si oui, pourquoi le faire ?
voir le i
après /
/(https|http):\/\/(jsitor)\.(com)\/(embed)\/([a-zA-Z0-9]+)/i.match("http://jsitor.com/embed/1QgJVmCam/ onload(alert('asdfadsf'))")
et renvoie mais ceci devrait échouer
#<MatchData "http://jsitor.com/embed/1QgJVmCam" 1:"http" 2:"jsitor" 3:"com" 4:"embed" 5:"1QgJVmCam">