正则表达式:只有字母数字但不是纯数字

IT技术 javascript regex
2021-02-24 13:29:53

例如:

'1'     => NG
'243'   => NG
'1av'   => OK
'pRo'   => OK
'123k%' => NG

我试过

 /^(?=^[^0-9]*$)(?=[a-zA-Z0-9]+)$/

但它工作得不是很好。

6个回答

利用

/^(?![0-9]*$)[a-zA-Z0-9]+$/

这个表达式有一个否定的前瞻来验证字符串不仅仅是数字。使用RegExr查看它的实际效果

在 regexr 中这有效,但在 Java 中使用 Validation @Pattern(regex="...") 它对我不起作用。也许这在所有正则表达式实现中都不可用?
2021-05-03 13:29:53

所以我们知道某处必须至少有一个“字母”字符:

[a-zA-Z]

它可以在它之前或之后有任意数量的字母数字字符(包括零),所以我们在它的[a-zA-Z0-9]*两边填充它

/^[a-zA-Z0-9]*[a-zA-Z][a-zA-Z0-9]*$/

这应该够了吧。

试试这个:

/^(?!^\d*$)[a-zA-Z\d]*$/

编辑:由于这与接受的答案基本相同,我会给你一些不同的东西:

/^\d*[a-zA-Z][a-zA-Z\d]*$/

没有前瞻,没有重复的复杂组,它只是验证至少有一个字母字符。这应该是相当快的。

第二个有效,它只排除数字,谢谢!它仍然不只排除字母表。
2021-04-26 13:29:53

试试这个:^(?!\d+\b)[a-zA-Z\d]+$
(?!\d+\b)将避免纯数字,添加 \w+ 然后混合字母和数字。

其实不,\b是个好主意。有了这个,正则表达式测试在使用无效字符串(如“123#test”)之前失败,因为前瞻首先失败。使用$前瞻不会失败。
2021-05-01 13:29:53
那么你可以编辑你的答案。如果你这样做,你会得到我的 +1。
2021-05-10 13:29:53
感谢您的评论,它应该更改为 ^(?!\d+\b)[a-zA-Z\d]+$
2021-05-16 13:29:53

这应该可以解决问题,无需回头看:

^(\d*[a-zA-Z]\d*)+$
尝试不使用捕获组。顺便说一下,Javascript 只支持前瞻。
2021-05-08 13:29:53