2017-05-28 73 views
2

我节省了许多与params[:number].gsub(/\D/,''),但我不想要去除的加号:+GSUB数字和+

例如,如果一个用户保存数+1 (516) 949-9508其保存为15169499508但如何才能保存+ as +15169499508

+0

就我所知,你只想在字符串的开头保留一个加号?如果你更喜欢别名,使用'.gsub(/ ^(\ +)| \ D + /,'\ 1')' –

回答

3

在红宝石\D只是[^0-9]的别名。你可以明确地设置[^0-9+]

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

或'[^ \ d +]'' – Stefan

2

如果你没有任何语法规则,delete会工作得很好:

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

我明白你只想保持一个加只在开始字符串。您需要使用:

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

这里,\A(\+)分支相匹配的文字加在字符串的开始。第二个分支是您的\D,它匹配所有字符,但匹配数字,仅匹配+量词,匹配1个或多个匹配项。 \1反向引用会在结果字符串中恢复该初始加号。