我有一个带有表格的Rails应用程序:“clients”。 clients表有一个字段:phone。手机数据类型是字符串。我正在使用postgresql。我想写一个查询,选择所有电话值超过10位的客户端。手机没有特定的格式:
<form action="" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Update" />
</form>
我一直在尝试以下各种变体:
+1 781-658-2687
+1 (207) 846-3332
2067891111
(345)222-777
123.234.3443
etc.
任何帮助都会很棒。
答案 0 :(得分:2)
你几乎拥有它,但是你错过'g'
的{{1}}选项,来自fine manual:
regexp_replace
函数为匹配POSIX正则表达式模式的子字符串提供新文本的替换。 [...] flags 参数是一个可选的文本字符串,包含零个或多个单字母标志,用于更改函数的行为。标记regexp_replace
指定不区分大小写的匹配,而标记i
指定替换每个匹配的子字符串而不是仅替换第一个匹配的子字符串。
所以g
的行为类似于Ruby的regexp_replace(string, pattern, replacement)
,而String#sub
的行为类似于Ruby的regexp_replace(string, pattern, replacement, 'g')
。
您还需要通过双引号Ruby字符串获得String#gsub
一直到PostgreSQL,因此您需要在Ruby中说\d
。当每个人都想使用相同的转义字符时,事情会变得混乱。
这应该做你想要的:
\\d
答案 1 :(得分:0)
试试这个:
phone_number.gsub(/[^\d]/, '').length