java - 使用正则表达式验证输入至少包含 2 个字母,允许特殊字符和普通字符

标签 java regex

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

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

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

当我给出例如:a12@45b 时,我希望它是有效的 并期望当我给出例如:a1234@时无效(此输出使我对我现在拥有的表达式有效)

最佳答案

匹配非数字 \D 并不能保证字符 a-z。

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

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

或者按照 @Thomas 的评论中的建议使模式不区分大小写并仅使用 a-z:

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

关于java - 使用正则表达式验证输入至少包含 2 个字母,允许特殊字符和普通字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57287913/

相关文章:

java - 是否有基于依赖关系创建数据对象的创建模式?

PHP Regex去除多余的标点符号

c++ - QRegExp 不符合预期

c# - 匹配字符串之间有空格并连接具有重叠空格的模式

MySql REGEXP 运算符

java - 每 7 天更改一次下载链接?

java - mediaMetadataRetriever.setDataSource(getBaseContext(),uri)引发非法参数异常

java - 我如何创建受方法安全保护的 DAO 的安全版本和不安全版本

java - 徽章实现问题

regex - 如何在 Scala 中删除两个特定字符之间的子字符串