如何匹配由至少4个唯一数字组成的数字

时间:2016-10-12 11:00:53

标签: regex mariadb

我需要(不幸的是必须在数据库级别 - 实际上是MariaDB)来验证使用正则表达式数字,使用规则,该数字必须至少包含4个唯一数字。

我需要完成的例子:

112233441122 is OK (made only from 1,2,3,4)
1234564222134 is OK (6 different digits)
122102111 is bad (3 digits only: 0,1,2)
91511201 is OK (5 digits)

我很乐意分享我的尝试,但现在我的反馈很不好,而且我的任何微不足道的尝试都没有更接近匹配甚至由两个不同角色组成的单词。 我也尝试过用户定义的函数来计算字符串中的字符数,但它们很慢并且不像使用REGEX那么优雅。

1 个答案:

答案 0 :(得分:9)

假设您使用的是支持反向引用和后续匹配的正则表达式引擎,您可以使用:

^(\d)\1*+(\d)(?:\1|\2)*+(\d)(?:\1|\2|\3)*+\d+$

使用原子组可以做同样的事情:

^(\d)(?>\1*)(\d)(?>(?:\1|\2)*)(\d)(?>(?:\1|\2|\3)*)\d+$