gpt4 book ai didi

php - mysql REGEXP 精确模式匹配

转载 作者:太空宇宙 更新时间:2023-11-03 10:33:47 26 4
gpt4 key购买 nike

我正在编写一个 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]')

最佳答案

有一些已知的复杂正则表达式可以匹配大型信用卡提供商(例如 Visa 和 MasterCard)的卡号。出于您的问题的目的,以下模式接近您想要的:

SELECT *
FROM yourTable
WHERE ccno REGEXP '^[0-9]{4}([[:space:]-]?[0-9]{4}){3}$';

Demo

此模式不准确,但您的数据也不匹配,例如,Amex 卡的格式为 dddd-dddddd-dddddd,有两个破折号,而不是三个破折号。如果您计划对生产数据执行此操作,则应研究如何将信用卡号与正则表达式相匹配。

https://www.regular-expressions.info/creditcard.html

关于php - mysql REGEXP 精确模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52537762/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com