2009-04-10 24 views
44

Ich übe mit Ruby und Regex, um bestimmte unerwünschte Zeichen zu löschen. Zum Beispiel:Wie kann ich Sonderzeichen löschen?

input = input.gsub(/<\/?[^>]*>/, '') 

und für Sonderzeichen, zB ☻ oder ™:

input = input.gsub('&#', '') 

Diese nur Zahlen verlässt, ok. Das funktioniert aber nur, wenn der Benutzer einen besonderen Charakter als Code eingibt, wie folgt aus:

&#153; 

Meine Frage: Wie ich Sonderzeichen gelöscht werden kann, wenn der Benutzer ohne Code ein Sonderzeichen eingibt, wie folgt aus:

™ ☻ 

Antwort

104

Zunächst denke ich, es könnte einfacher zu definieren, was "richtige Eingabe" und alles andere entfernen. Zum Beispiel:

input = input.gsub(/[^0-9A-Za-z]/, '') 

Wenn das nicht das, was Sie wollen (Sie nicht-lateinische Alphabete unterstützen möchten, etc.), dann denke ich, eine Liste der Glyphen machen sollten Sie entfernen möchten (wie ™ oder ☻), und entfernen Sie sie einzeln, da es schwierig ist, zwischen einem chinesischen, arabischen usw. Zeichen und einem Piktogramm programmatisch zu unterscheiden.

Schließlich möchten Sie möglicherweise Ihre Eingabe durch Konvertierung in oder aus HTML-Escape-Sequenzen zu normalisieren.

+0

Danke, ich denke, es ist einfacher, eine Liste der zulässigen Zeichen zu erstellen. – Yud

+0

Danke !! Ich habe 'input = input.gsub (/ [^ 0-9A-Za-z] /, '')' verwendet, um die Zeichenfolge unverändert zu lassen. Es gibt mir ein paar zusätzliche Plätze an der Stelle dieser besonderen Zeichen. – Surya

8

Sie können alle passen Sie die Zeichen wollen, und sie dann miteinander verbinden, wie folgt aus:

original = "aøbæcå" 
stripped = original.scan(/[a-zA-Z]/).to_s 
puts stripped 

die "abc"

10

Wenn Sie nur ASCII-Zeichen wollte, dann können Sie verwenden:

original = "aøbauhrhræoeuacå" 
cleaned = "" 
original.each_byte { |x| cleaned << x unless x > 127 } 
cleaned # => "abauhrhroeuac" 
7

Sie parameterize verwenden können:

'@!#$%^&*()111'.parameterize 
=> "111" 
+0

Bitte bearbeiten Sie Ihre Antwort, um eine Erklärung hinzuzufügen, wie Ihr Code funktioniert und wie er das Problem des OP löst. Viele SO-Poster sind Neulinge und werden den von Ihnen geposteten Code nicht verstehen. –

+0

Doc dort: http://apidock.com/rails/String/parameterize –

+0

Gotcha mit parametrisieren: Es lässt Bindestriche. Ich benutze "etwas-hier" .unterstimmen.Parameterisieren, um es zu erklären. – emptywalls

3

Ein einfacher Weg, dies durch Can Berk Güder Antwort inspirated zu tun ist:

Um Sonderzeichen zu löschen:

input = input.gsub(/\W/, '') 

Um Wortzeichen zu halten:

input = input.scan(/\w/) 

Am Ende Eingang gleich ist! Probieren Sie es aus: http://rubular.com/

Verwandte Themen