Другой вариант - использовать положительный прогноз и указать длину от 1 до 20 символов:
^(?=.{1,20}$)[A-Z0-9]*-[A-Z0-9]*$
В зависимости от инструмента или языка, если вы хотите использовать якоря, отличные от ^
и $
, чтобы соответствовать началу и концу строки или строки, на которую вы можете посмотреть эта страница .
Например:
let pattern = /^(?=.{1,20}$)[A-Z0-9]*-[A-Z0-9]*$/;
[
"AAAAAAAAAA-AAAAAAAAA",
"-",
"A-A",
"-A",
"A-",
"A",
"AAAAAAAAAAA-AAAAAAAAA",
"AAAAAAAAAAAAAAAAAAAA",
].forEach(s => {
if (pattern.test(s)) {
console.log("Match: '" + s + "' (Nr of chars: " + s.length + ")");
} else {
console.log("No match: '" + s + "' (Nr of chars: " + s.length + ")");
}
});