我正在寻找一个正则表达式,它需要字母和数字字符(不只是数字或只是字母),而且是一个特定的长度。
我知道这可以通过使用两个正则表达式或其他程序代码来检查长度来完成,但我想知道它是否可以通过使用一个正则表达式来实现。
这可以捕获两者,但不受长度的限制。
([0-9]+[a-z]+|[a-z]+[0-9]+)[0-9a-z]*
遗憾的是,这不起作用
(([0-9]+[a-z]+|[a-z]+[0-9]+)[0-9a-z]){10}
答案 0 :(得分:2)
您可以使用正面预测?=
来验证字母和数字的存在,并使用限制{10}
^(?=.*\d)(?=.*[a-zA-Z])([a-zA-Z\d]{10}$)
演示
const regex = /^(?=.*\d)(?=.*[a-zA-Z])([a-zA-Z\d]{10}$)/;
console.log(regex.test('abcdefghi9'));
console.log(regex.test('211212jknN'));
console.log(regex.test('211212jknnd')); // extra length
console.log(regex.test('2121212122')); // no alphabets
console.log(regex.test('csdcdcdcdc')); // no digits

更新:要查找单行使用中的所有匹配项
\b(?=[a-zA-Z]+\d|\d+[a-zA-Z])[a-zA-Z\d]{10}\b
(?=[a-zA-Z]+\d
:一个或多个a-zA-Z
和一个数字
|\d+[a-zA-Z])
:或一个或多个数字和一个a-zA-Z
演示
const regex = /\b(?=[a-zA-Z]+\d|\d+[a-zA-Z])[a-zA-Z\d]{10}\b/g;
const str = 'sasas12212 aaaaaaaaaa 211212jknn 211212jknnd 2121212122 csdcdcdcd1 csdcdcdc12';
console.log(str.match(regex));

答案 1 :(得分:0)
尝试这样的事情。这种情况长度= 3
^(?=.{3,3}$)[a-zA-Z0-9]*(?:_[a-zA-Z0-9]+)*$