Je suis nouveau sur Ruby et j'essaie actuellement de supprimer une partie de la chaîne de requête http.
Demande:
POST / test / userRegistration? id = 1234 & name = John & address = UK
Existe-t-il un moyen de supprimer "name = John &"
en utilisant slice
, gsub
ou toute autre méthode?
La sortie doit être POST / test / userRegistration? Id = 1234 & address = UK
Remarque: la valeur du paramètre "name" peut être différente à chaque fois
Merci
4 Réponses :
Essayez ceci ...
str = "POST /test/userRegistration?id=1234&name=John&address=UK" str = str.sub(/&name=.+&/, '&') str => "POST /test/userRegistration?id=1234&address=UK"
Cela échoue si le paramètre de nom ne se situe pas entre deux autres paramètres. Et s'il est réorganisé pour être le premier ou le dernier?
Vous pouvez utiliser adressable . C'est probablement plus facile que d'écrire vous-même une solution de modification de chaîne.
Vous pouvez utiliser split
sur la chaîne pour la transformer en tableau, puis rejeter
l'élément name =
, puis joindre
en une chaîne:
"POST /test/userRegistration?id=1234&name=John&address=UK".split('&').reject { |e| e.start_with?('name=') }.join('&') => "POST /test/userRegistration?id=1234&address=UK"
Il existe des possibilités supplémentaires ici .
Ce n'est pas la réponse courte, mais c'est probablement la plus robuste car elle analyse en fait l'URL
require 'uri' # parse request = "POST /test/userRegistration?id=1234&name=John&address=UK".split uri = URI request[1] query = URI.decode_www_form uri.query # modify the query params query.delete_if { |param| param[0] == "name" } # convert back to string uri.query = URI.encode_www_form query new_request = "#{request[0]} #{uri}"