例如:
'1' => NG
'243' => NG
'1av' => OK
'pRo' => OK
'123k%' => NG
我尝试过
/^(?=^[^0-9]*$)(?=[a-zA-Z0-9]+)$/
但它的表现并不是很好。
'1' => NG
'243' => NG
'1av' => OK
'pRo' => OK
'123k%' => NG
我尝试过
/^(?=^[^0-9]*$)(?=[a-zA-Z0-9]+)$/
但它的表现并不是很好。
所以我们知道在其中必须至少有一个“字母”字符:
[a-zA-Z]
它可以在前面或后面带有任意数量的字母数字字符(包括零),因此我们在两侧都使用 [a-zA-Z0-9]*
进行填充:
/^[a-zA-Z0-9]*[a-zA-Z][a-zA-Z0-9]*$/
那应该就可以了。
+
替换为例如{1,80}
,用于少于80个字符的行);但是说正则表达式是验证长度的不良工具,如果可能的话,我会直接检查它(例如line.length() < 80
)然后匹配正则表达式。 - Andrzej Doyle请尝试以下操作:
/^(?!^\d*$)[a-zA-Z\d]*$/
编辑: 由于本质上与已接受的答案相同,我会给你一些不同的内容:
/^\d*[a-zA-Z][a-zA-Z\d]*$/
没有向前查找,也没有重复的复杂组,它只验证是否至少有一个字母字符。这应该非常快。
^(?!\d+\b)[a-zA-Z\d]+$
(?!\d+\b)
将避免纯数字,添加 \w+ 然后混合字母和数字。\b
是一个好主意。有了它,正则表达式测试会在无效字符串(如“123#test”)之前失败,因为先行断言首先失败。使用 $
先行断言不会失败。 - MaxArt这是严格的字母数字
String name="^[^a-zA-Z]\\d*[a-zA-Z][a-zA-Z\\d]*$";
^[a-zA-Z0-9]*[a-zA-Z]+[a-zA-Z0-9]*$
这应该可以解决问题,而不需要使用lookbehind:
^(\d*[a-zA-Z]\d*)+$