Rails按字段中的位数查询

时间:2015-10-29 23:30:24

标签: ruby-on-rails postgresql activerecord rails-activerecord

我有一个带有表格的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.

任何帮助都会很棒。

2 个答案:

答案 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