RegEx для совпадения с одним появлением тире в любом месте [A-Z0-9] + с общим появлением 20 символов - PullRequest
1 голос
/ 04 июня 2019

Я не мог найти регулярное выражение для совпадения с единственным появлением тире где-нибудь в [A-Z0-9] + с максимальным появлением 20 символов, так что это похоже на - и [A-Z0-9] + в целом максимум 20 символов.

Это самый близкий образец, который я могу получить, но не сработал

([A-Z0-9]{1,19}|\-{1})

Ответы [ 2 ]

1 голос
/ 04 июня 2019

Другой вариант - использовать положительный прогноз и указать длину от 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 + ")");
  }
});
1 голос
/ 04 июня 2019

Зачем использовать регулярное выражение, особенно одно регулярное выражение? Эти условия гораздо проще проверить по отдельности.

Например, используя Perl:

if (length($str) <= 20 && $str =~ /\A[A-Z0-9]*-[A-Z0-9]*\z/)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...