29

我有这个正则表达式只允许字母数字字符。

如何检查字符串是否也至少包含 3 个字母字符。

我目前的正则表达式,

if(!/^[a-zA-Z0-9]+$/.test(val))

我想强制执行字符串以确保至少有 3 个连续的字母字符;

111 // false
aaa1 // true
11a // false
bbc // true
1a1aa // false
4

4 回答 4

67

+表示“1 次或多次出现”。

{3}意思是“3 次出现”。

{3,}表示“出现 3 次或多次”。

+也可以写成{1,}

*也可以写成{0,}

于 2013-03-11T14:28:31.573 回答
41

要在任何地方强制使用三个字母字符,

/(.*[a-z]){3}/i

应该足够了。

编辑。啊,你已经编辑了你的问题,说三个字母字符必须是连续的。我还看到您可能希望强制所有字符都应与您的“接受”字符之一匹配。然后,前瞻可能是最干净的解决方案:

/^(?.*[a-z]{3})[a-z0-9]+$/i

请注意,我使用不区分大小写的修饰符/i以避免必须编写a-zA-Z.

选择。您可以在此处阅读有关环视断言的更多信息。但在这个阶段,它可能有点过头了。这是一个替代方案,您可能会发现根据您已经知道的内容更容易分解:

/^([a-z0-9]*[a-z]){3}[a-z0-9]*$/i
于 2013-03-11T14:30:25.920 回答
9

这应该做的工作:

^([0-9]*[a-zA-Z]){3,}[0-9]*$

它检查至少 3 个“零个或多个数字 + 1 个 Alpha”序列 + 零个或多个数字。

于 2013-03-11T14:33:14.843 回答
0

你想匹配零个或多个数字,然后是 3 个连续的字母,然后是任何其他数字?

/\d*(?:[a-zA-Z]){3,}\d*/

于 2013-03-11T14:34:31.523 回答