java - 使用正则表达式验证输入至少有 2 个字母,允许特殊字符和普通字符
问题描述
我需要一个至少有 2 个字母的正则表达式。总长度应介于 6 和 50 个字符之间,并且还可以包括这些特殊字符 - _ 。@
我想出了这一行,但当我输入 1 个字母和一个特殊字符(总共至少 6 个字符)时,它仍然可以接受。如果输入有效,则至少应包含 2 个字母。
^(?=(?:\d*\D){2})[a-zA-Z0-9-_@\\.]{6,50}$
我希望它在我给出例如:a12@45b 时它是有效的,并且在我给出例如:a1234@ 时期望它是无效的(这个输出给我现在的表达式是有效的)
解决方案
不匹配数字\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}$
推荐阅读
- routes - Rails 5 How can I change the url from companies/:id/jobs/:id to jobs/:id
- html - whitespace between
- and first
- gobbled up despite inline-block mode
- python - What is the difference between south migrations and django migrations?
- sql - 新手寻求帮助,Max Aggregate 未返回预期结果
- python - Debug QT5 application in Spyder3
- json - Read JSON and Iterate in Powershell
- sql - 从今天开始获取 4 天前的数据
- c++ - struct 向量的 C++ 迭代器编译器错误
- python - optimizing numpy vectorization on calculating distances and np.sum
- sql-server - SQL Server 等效方法:sys_connect_by_path