1
votes

Comment supprimer une partie de chaîne?

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


0 commentaires

4 Réponses :


3
votes

Essayez ceci ...

str = "POST /test/userRegistration?id=1234&name=John&address=UK"
str = str.sub(/&name=.+&/, '&')
str
=> "POST /test/userRegistration?id=1234&address=UK"


1 commentaires

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?



0
votes

Vous pouvez utiliser adressable . C'est probablement plus facile que d'écrire vous-même une solution de modification de chaîne.


0 commentaires

0
votes

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 .


0 commentaires

0
votes

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}"


0 commentaires