2016-09-26 4 views
1

i auf ein Problem stoßen, wenn ich die Eingabezeichenfolge überprüfen möge, ob es eine gültige Hash enthält, bevor auf sie eval ausführen, zum Beispiel:Wie kann man prüfen, ob ein String gültigen Hash enthält

"{:key=>true}" wenn ich eval es Rückkehr laufen eine korrekte Hash, aber wenn ich "{:key=>true" auf dieser Zeichenfolge eval laufen bekomme ich Syntaxfehler der erwarteten Token:

(eval):1: syntax error, unexpected end-of-input, expecting '}' {:redirect=>true^

ich bisher einige grundlegende Validierung aber kein Glück versucht haben.

also im Grunde, was ich wissen möchte, ist, wie man eine, dass eine Zeichenfolge korrekte Hash-Format enthalten validieren.

+3

Wo kommt, dass Hash/string kommen aus? – Stefan

Antwort

4

Sie nicht, ohne tatsächlich das Parsen es wie Rubin sagen können, und (vorausgesetzt, Sie die Zeichenfolge vertrauen), die einfachste Art und Weise der Parsen es tun, um den eval Aufruf einfach ist, und behandelt die Ausnahme:

Dies ist genau, wofür Ausnahmen sind, anstatt Ihren Code mit Überprüfungen für, ob Operationen erfolgreich sind, Sie nur die Vorgänge ausführen und Fehler behandeln, die auftreten.

2

die Zeichenfolge zu validieren Sie Kernel#eval + Überprüfung der Art verwenden können:

def valid_hash?(string) 
    eval(string).is_a?(Hash) 
rescue SyntaxError 
    false 
end 

Verbrauch:

string = "{:key=>true}" 
valid_hash?(string) 
#=> true 
string = "I am not hash" 
valid_hash?(string) 
#=> false 
Verwandte Themen