Шаблон regEx для полной блокировки специальных символов и блокировки пробелов в начале и в конце строки и допускается между словами в javascript - PullRequest
0 голосов
/ 30 апреля 2020

шаблон regEx для полной блокировки специальных символов и блокировки пробелов в начале и конце строки и допуска между словами в JavaScript,

Я пробовал разными способами, но не смог его получить.

требование: не должно быть пробела до и после строки и не должно содержать специальных символов (<>?/|\:"*+).

Я пробовал это ^[^<>?/+:"|\\\\*+\\s][^<>?+:"|\\\\*+]*$

это обрабатывать все, кроме пробела после строки

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Попробуйте этот шаблон ^(?!\s)[^<>/:"\\|+*\n]*[^<>/:"\\|+*\s]$

Он соответствует всем тестовым шаблонам, которые вы дали. В классах символов есть небольшое дублирование, но это потому, что в самом конце нам нужно убедиться, что он не заканчивается символом пробела.

В ссылке regex101 есть объяснение частей шаблона.

regex101

0 голосов
/ 30 апреля 2020

Потребовалось некоторое время, чтобы закрепиться, и обычно я просто делил это на две проверки (одну для специальных символов и другую для пробела в начале и в конце) или просто обрезал пробелы в начале и конце и просто проверял специальные символы.

/^(?!\s)[^<>?/|\\:"*+]*[^<>?/|\\:"*+\s]$/
  • ^(?!\s) не начинается с непробельного символа
  • [^<>?/|\\:"*+\s]$ не спец. / Заканчивается непробельным символом
  • [^<>?/|\\:"*+]* не содержит специальных символов

Набор тестов

const regex = /^(?!\s)[^<>?/|\\:"*+]*[^<>?/|\\:"*+\s]$/;

it.each([
  // valid - single word
  ["t", true],
  ["te", true],
  ["tes", true],
  ["test", true],
  // valid - multi-word
  ["test test", true],
  ["test test test", true],
  [
    "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vel vulputate lacus, bibendum auctor nulla. Cras eget vehicula arcu. Aliquam non lacus sed quam consequat laoreet sed at massa. Nam magna nulla, tempus id consequat efficitur, luctus non sapien. Maecenas eget volutpat neque. Etiam lobortis ipsum a imperdiet semper. Sed vel quam porta, lobortis metus commodo, aliquam libero. Vestibulum nulla tellus, sagittis quis auctor id, malesuada ac purus. Phasellus nunc mi, viverra id sem ut, laoreet porta orci. Cras malesuada quam ut auctor tristique. Suspendisse bibendum purus tortor, nec finibus magna imperdiet ut. Mauris id ligula dictum, feugiat nulla non, bibendum nunc. Phasellus eget sem cursus, placerat risus non, vehicula quam.",
    true
  ],
  // invalid - leading/trailing whitespace
  ["", false],
  ["  test", false],
  ["test  ", false],
  ["  test  ", false],
  ["  test test  ", false],
  // invalid - special chars only
  ["<", false],
  [">", false],
  ["?", false],
  ["/", false],
  ["|", false],
  ["\\", false],
  [":", false],
  ['"', false],
  ["*", false],
  ["+", false],
  // invalid - starts with special chars
  ["<t", false],
  ["<te", false],
  ["<tes", false],
  ["<test", false],
  [">test", false],
  ["?test", false],
  ["/test", false],
  ["|test", false],
  ["\\test", false],
  [":test", false],
  ['"test', false],
  ["*test", false],
  ["+test", false],
  // invalid - ends with special chars
  ["t<", false],
  ["st<", false],
  ["est<", false],
  ["test<", false],
  ["test>", false],
  ["test?", false],
  ["test/", false],
  ["test|", false],
  ["test\\", false],
  ["test:", false],
  ['test"', false],
  ["test*", false],
  ["test+", false],
  // invalid - special chars mixed
  ["te<st", false],
  ["te>st", false],
  ["te?st", false],
  ["te/st", false],
  ["te|st", false],
  ["te\\st", false],
  ["te:st", false],
  ['te"st', false],
  ["te*st", false],
  ["te+st", false],
  // invalid - leading/trailing and special chars mixed
  ["  te<st", false],
  ["te<st  ", false],
  ["  te<st  ", false],
  // invalid - multi-word, leading/trailing whitespace, and special chars
  ["te?st test", false],
  ["test te?st", false],
  ["test ? test", false],
  ["  te?st test", false],
  ["test te?st  ", false],
  ["  test ? test  ", false]
])("should validate [%s] - %s", (input, expected) => {
  expect(regex.test(input)).toEqual(expected);
});

Edit regex - no special chars and leading/trailing whitespace, allow words

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...