我在这里尝试了以下正则表达式匹配http://rubular.com/但它一次只匹配3个字符或3个数字.
^((\d{3})|(\w{3}))$
Run Code Online (Sandbox Code Playgroud)
我需要这样的结果:
123eee
4r43fs
干得好:
^(?=(?:[a-z]*\d){3})(?=(?:\d*[a-z]){3})\w{6}$
Run Code Online (Sandbox Code Playgroud)
如果至少有三个数字,至少三个字母,最多六个字符,则字符串必须匹配.
这是如何运作的?
\w{6}直到字符串结束前瞻
让我们分解第一个前瞻: (?=(?:[a-z]*\d){3})
它断言三次({3}),在字符串中的这个位置,即断言的字符串的开头^,我们能够匹配任意数量的字母,后跟一个数字.这意味着必须至少有三位数.
一个前瞻应该足以检查,如果有正好3位数:
^(?=\D*(?:\d\D*){3}$)[^\W_]{6}$
Run Code Online (Sandbox Code Playgroud)
用作[^\W_]速记[A-Za-z0-9].
如果你想使用正则表达式,它是非常复杂的:
^(?=.*\d.*\d.*\d)(?=.*[a-zA-Z].*[a-zA-Z].*[a-zA-Z]).{6}$
Run Code Online (Sandbox Code Playgroud)
这将做你想要的.
\w不是你想要的,它还包括\d和下划线"_".
(?=.*\d.*\d.*\d)是一个积极的先行断言来检查字符串中三位数的条件.
(?=.*[a-zA-Z].*[a-zA-Z].*[a-zA-Z])是一个积极的先行断言来检查字符串中三个字母的条件.
.{6} 检查整体长度为6