2017-05-28 5 views
2

ich eine Zahl mit params[:number].gsub(/\D/,'') speichern, aber ich will nicht, das Plus-Symbol abzustreifen: +gsub Zahlen und +

Zum Beispiel, wenn eine Benutzernummer speichert +1 (516) 949-9508 es als 15169499508 spart aber wie können wir bewahren die + als +15169499508?

+0

Soweit ich verstehe, möchten Sie nur ein Plus nur am Anfang der Zeichenfolge beibehalten? Verwenden Sie '.gsub (/^(\ +) | \ D + /, '\ 1')' –

Antwort

3

In Ruby \D ist nur ein Alias ​​für [^0-9]. Sie können explizit gesetzt [^0-9+]:

params[:number].gsub(/[^0-9+]/,'') 
+1

Oder '[^ \ d +]' wenn Sie die Aliase bevorzugen. – Stefan

2

Wenn Sie keine syntaktischen Regeln verfügen, delete würde gut funktionieren:

'+1 (516) 949-9508'.delete('^0-9+') #=> "+15169499508" 
4

Ich verstehe Sie wollen nur ein Plus halten nur am Anfang die Saite. Sie müssen verwenden:

.gsub(/\A(\+)|\D+/, '\1') 

Hier \A(\+) Zweig eine wörtliche Spiele und am Anfang des Strings. Die zweite Verzweigung ist Ihre \D, die alle Zeichen aber Ziffern entspricht, nur mit einem + Quantifizierer, der 1 oder mehr Vorkommen entspricht. Die Backreference \1 stellt das anfängliche Pluszeichen in der resultierenden Zeichenfolge wieder her.