2016-11-29 10 views
2

私はこのアイデアを交換するための正規表現を見つけようとしている:正規表現:文字列の比較で無視文字

if($input === numbers_only($phone_number)) { 
    // do something 
} 

仮定

$入力は常に

数値となります

numbers_only()はすべて数字以外の文字を削除します

私は単純に上記のような機能を使用できない理由であるTEXTとしてフォーマット列に対して、これを行い、MySQLのクエリを記述する必要があり、一日の終わりにコンテキスト

。だから、次のようなものになります:

SELECT 
    number 
FROM 
    phones 
WHERE 
    number REGEXP '...' 

これは正規表現で処理できるものですか?

更新

私はMySQLでCONVERT()メソッドは、TEXT(いないvarchar型)を変換処理することができる方法があります場合は、この質問(またはそれに来るために別の方法が)であってもよいというフレーズに良い方法を考えます比較のためINTへ。

+0

[MySQLクエリで文字列から数値を抽出するにはどうすればよいですか?](http://stackoverflow.com/questions/978147/how-do-you-extract-a-numerical-value- from-a-string-in-a-mysql-query) – Bobot

+0

http://stackoverflow.com/questions/6604455/php-code-to-remove-everything-but-numbers、誤解されるとごめんなさい。 – Progrock

+0

ありがとう@Progrock - 残念ながら、PHPであるpreg_replace()にリンクすると、最終的にMySQLが必要になります。 – Verl

答えて

1

を浄化してから、をテーブルに保存することをお勧めします。このようにして、preg_replace('/[^0-9]+/', '', $num)(PHPの場合)のような何かを行うことができるクライアント言語の能力をフルに発揮できます。おそらく、すべてのデータを修正するには、今すぐの作業を行う必要がありますか?

しかし、あなたがコラムにゴミが溜まっているとすれば、私たちができることを見てみましょう。

あなたは電話番号について話しているようですか?存在する可能性のある文字は少数しかありません(たぶん " - ()")でしょうか?だから...

WHERE $num = REPLACE(...(REPLACE(number, '-', ''), '(', '')...) 

本当に乱雑です。そして本当に非効率的です。

+0

ありがとうリックジェームズ - 私はこれは最高の解決策は、単純に箇条書きを噛んで、CAST()またはCONVERT()関数を実行することができるように代替の形式に列の種類を変更する以外の(私はこれらの機能を正しく理解する)。助けを感謝します! – Verl

+0

数字が最初にない限り、 'CAST'や' CONVERT'がどのように役立つのか分かりません。 –

+0

Rick James - あなたが正しいです、私はいくつかのテストを行い、キャスト/変換は最初の非数字文字の後のすべてのテキストを切り捨てるようです。 INT(x)の列に変換すると、現在のデータを整理する作業を進めたいと思えば、解決策に見えるように見えます。同じように見えますか? – Verl