2017-11-10 1 views
-3

私のデータベースにはクレジットカード番号がありません。MySQLでクレジットカードを検索

テキストコンテンツにクレジットカードが含まれていないことを確認します。一部のクライアントは、自分のクレジットカードを入力すると、彼らはレポート を提出するとき私が試した:

SELECT * FROM reports WHERE content RLIKE '\b(?:\d[ -]*?){13,16}\b'; 

それは私にこのエラー

ERROR 1139(42000)を得た:正規表現からもらったエラー「無効な繰り返しオペレータのオペランドを」

お願いします。 ありがとう

+0

MySQLの正規表現には '\ b'のようなエスケープシーケンスはありません。 MySQL [regexp documentation](https://dev.mysql.com/doc/refman/5.7/en/regexp.html)を読んだことがありますか? – Barmar

答えて

0

MySQLの正規表現構文では、単語境界に\bは使用されません。[[:<:]][[:>:]]が使用されます。数字の場合は\dを使用しません。[[:digit:]]を使用します。また、?:というプレフィックスはグループに含まれていません。バックリファレンスがないため不要です。したがって、キャプチャグループとキャプチャしていないグループに違いはありません。

しかし、エラーメッセージの理由は、それが*?のような貪欲でない量指定子を持たないということです。

これを試してみてください:

SELECT * 
FROM reports 
WHERE content RLIKE '[[:<:]]([[:digit:]][- ]?){13,16}[[:>:]]' 

これはワード末尾に続く単語の先頭に、それぞれの後の可能なセパレータを13-16の数字と一致します。