如何使用3个字符和3个数字进行正则表达式?

Tea*_*mA1 7 javascript regex

我在这里尝试了以下正则表达式匹配http://rubular.com/但它一次只匹配3个字符或3个数字.

^((\d{3})|(\w{3}))$
Run Code Online (Sandbox Code Playgroud)

我需要这样的结果:

123eee

4r43fs

zx8*_*x81 8

干得好:

^(?=(?:[a-z]*\d){3})(?=(?:\d*[a-z]){3})\w{6}$
Run Code Online (Sandbox Code Playgroud)

http://regex101.com/r/hO5jY9

如果至少有三个数字,至少三个字母,最多六个字符,则字符串必须匹配.

这是如何运作的?

  1. 这是一个经典的密码验证风格的正则表达式.
  2. 两个前瞻检查我们至少有三位数字和至少三个字母
  3. 在这些断言之后,我们可以自由地匹配任何6个字符,\w{6}直到字符串结束

前瞻

让我们分解第一个前瞻: (?=(?:[a-z]*\d){3})

它断言三次({3}),在字符串中的这个位置,即断言的字符串的开头^,我们能够匹配任意数量的字母,后跟一个数字.这意味着必须至少有三位数.


Jon*_*y 5 8

一个前瞻应该足以检查,如果有正好3位数:

^(?=\D*(?:\d\D*){3}$)[^\W_]{6}$
Run Code Online (Sandbox Code Playgroud)

用作[^\W_]速记[A-Za-z0-9].

在regex101上测试


ste*_*ema 7

如果你想使用正则表达式,它是非常复杂的:

^(?=.*\d.*\d.*\d)(?=.*[a-zA-Z].*[a-zA-Z].*[a-zA-Z]).{6}$
Run Code Online (Sandbox Code Playgroud)

在Regexr上看到它

这将做你想要的.

  1. \w不是你想要的,它还包括\d和下划线"_".

  2. (?=.*\d.*\d.*\d)是一个积极的先行断言来检查字符串中三位数的条件.

  3. (?=.*[a-zA-Z].*[a-zA-Z].*[a-zA-Z])是一个积极的先行断言来检查字符串中三个字母的条件.

  4. .{6} 检查整体长度为6