【发布时间】:2018-09-27 13:08:17
【问题描述】:
我正在编写一个 php 脚本,它将遍历数据库中的所有表并查找纯文本信用卡号。为此,我使用 MySQL REGEXP。我只需要那些“仅”包含信用卡号的结果。如果有任何包含信用卡号的文本数据,则脚本不应考虑它。
例如
|编号 | ccno |
| 1 | 4111111111111111 |
| 2 | 4111 1111 1111 1111 |
| 3 | 4111-1111-1111-1111 |
| 4 |一些文字 4111111111111111 一些文字 |
如果在上表中触发了查询,那么它应该返回前 3 条记录,而不应该返回第 4 条记录。为此,我使用以下查询,我面临的问题是查询返回所有 4 条记录。
SELECT ccno FROM aacc WHERE
(ccno = REGEXP '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
OR ccno = REGEXP '[0-9][0-9][0-9][0-9] [0-9][0-9][0-9][0-9] [0-9][0-9][0-9][0-9] [0-9][0-9][0-9][0-9]'
OR ccno = REGEXP '[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]')
【问题讨论】:
-
你不是也想验证“校验位”吗?