在MySQL中搜索信用卡

时间:2017-11-10 00:34:19

标签: mysql

我正在尝试在我的数据库中找到普通信用卡号。

我想确保文字内容不包含信用卡。有些客户在提交报告时会输入信用卡 我试过了:

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

它给了我这个错误

  

ERROR 1139(42000):从regexp获得错误'重复 - 运算符操作数无效'

我需要一些帮助。 感谢

1 个答案:

答案 0 :(得分:0)

MySQL正则表达式语法不使用\b作为字边界,它使用[[:<:]][[:>:]]。对于数字,它不使用\d,而是使用[[:digit:]]。它在组中也没有?:前缀 - 它们不需要它们,因为它没有反向引用,因此捕获组和非捕获组之间没有区别。

但是您的错误消息的原因是它没有像*?这样的非贪婪量词。

试试这个:

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

这匹配一个单词开头,13-16位数字,每个数字后面有一个可能的分隔符,后跟一个单词结束。