首页 > 解决方案 > 使用正则表达式验证输入至少有 2 个字母,允许特殊字符和普通字符

问题描述

我需要一个至少有 2 个字母的正则表达式。总长度应介于 6 和 50 个字符之间,并且还可以包括这些特殊字符 - _ 。@

我想出了这一行,但当我输入 1 个字母和一个特殊字符(总共至少 6 个字符)时,它仍然可以接受。如果输入有效,则至少应包含 2 个字母。

^(?=(?:\d*\D){2})[a-zA-Z0-9-_@\\.]{6,50}$

我希望它在我给出例如:a12@45b 时它是有效的,并且在我给出例如:a1234@ 时期望它是无效的(这个输出给我现在的表达式是有效的)

标签: javaregex

解决方案


不匹配数字\D并不能保证字符 az。

您可以更新积极的前瞻以断言 2 次,而不是 a-zA-Z,然后是 a-zA-Z。请注意,您不必转义字符类中的点。

^(?=(?:[^a-zA-Z]*[A-Za-z]){2})[a-zA-Z0-9-_@.]{6,50}$

或者正如@Thomas在评论中所建议的那样,使模式不区分大小写并仅使用 az:

^(?i)(?=(?:[^a-z]*[a-z]){2})[a-z0-9-_@.]{6,50}$

推荐阅读