次の正規表現に一致する、postgres に保存されているすべてのレコードを見つける必要があります。
^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$
このようなもの:
SELECT * FROM users WHERE users.phone ~ '^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$'
しかし、これはエラーで落ちます:
無効な正規表現: 数量詞オペランドが無効です
Postgres がこの正規表現で動作しないのはなぜですか?
プレーンな Ruby で同じものを使用すると、問題なく動作します。
アップデート
問題は WHERE だけです。私がしようとすると:
SELECT '+79637434199' ~ '^((8|\+7)[\- ]?)(\(?\d{3}\)?[\- ]?)[\d\- ]{7,10}'
Postgres は true を返します。しかし、私がしようとすると:
SELECT * FROM users WHERE users.phone ~ '^((8|\+7)[\- ]?)(\(?\d{3}\)?[\- ]?)[\d\- ]{7,10}'
結果: 「無効な正規表現: 数量詞オペランドが無効です」 .