javascript - регулярное выражение для буквенно-цифрового и специального символа - PullRequest
0 голосов
/ 12 декабря 2018

Попытка построить регулярное выражение для строки (название компании / организации) со следующими условиями:

  • без начального или конечного пробела
  • без двойного пробела между
  • не должен допускать использование только одного символа (в алфавитно-цифровом или белом списке)
  • может начинаться с буквенно-цифрового или белого символа в списке
  • не должен допускать ввод любого белого символа в списке несколько раз

регулярное выражение для этих: /(?! )([a-zA-Z0-9_\.\-#&])+([a-zA-Z0-9_\.\-#&\s])*(?<! )$/

console.log(/(?! )([a-zA-Z0-9_\.\-#&])+([a-zA-Z0-9_\.\-#&\s])*(?<! )$/.test('_')); // shouldn't allow

console.log(/(?! )([a-zA-Z0-9_\.\-#&])+([a-zA-Z0-9_\.\-#&\s])*(?<! )$/.test('a')); // shouldn't allow

console.log(/(?! )([a-zA-Z0-9_\.\-#&])+([a-zA-Z0-9_\.\-#&\s])*(?<! )$/.test('abc   abc')); // shouldn't allow

console.log(/(?! )([a-zA-Z0-9_\.\-#&])+([a-zA-Z0-9_\.\-#&\s])*(?<! )$/.test('_123')); // works fine

console.log(/(?! )([a-zA-Z0-9_\.\-#&])+([a-zA-Z0-9_\.\-#&\s])*(?<! )$/.test('# abc')); // works fine

console.log(/(?! )([a-zA-Z0-9_\.\-#&])+([a-zA-Z0-9_\.\-#&\s])*(?<! )$/.test('abc abc!')); // works fine

console.log(/(?! )([a-zA-Z0-9_\.\-#&])+([a-zA-Z0-9_\.\-#&\s])*(?<! )$/.test('abc abc# abc')); // works fine

текущее регулярное выражение не соответствует всем критериям и не может выяснить, в чем проблема с регулярным выражением?

1 Ответ

0 голосов
/ 12 декабря 2018

Вы можете использовать

/^(?=.{2})(?!(?:[^_.#&!-]*[_.#&!-]){2})[a-zA-Z0-9_.#&!-]+(?:\s[a-zA-Z0-9_.#&!-]+)*$/

Подробности

  • ^ - начало строки
  • (?=.{2}) - любые 2символы должны быть в начале
  • (?!(?:[^_.#&!-]*[_.#&!-]){2}) - нет 2 вхождений _.#&!- символов в строке
  • [a-zA-Z0-9_.#&-]+ - 1 или более допустимых символов (кроме пробелов)
  • (?:\s[a-zA-Z0-9_.#&!-]+)* - 0+ вхождений
    • \s - 1 пробел
    • [a-zA-Z0-9_.#&!-]+ - 1+ букв, цифр и некоторых символов
  • $ - конец строки.

JS demo

var rx = /^(?=.{2})(?!(?:[^_.#&!-]*[_.#&!-]){2})[a-zA-Z0-9_.#&!-]+(?:\s[a-zA-Z0-9_.#&!-]+)*$/;
console.log(rx.test('_')); // shouldn't allow
console.log(rx.test('a')); // shouldn't allow
console.log(rx.test('abc   abc')); // shouldn't allow
console.log(rx.test('_123')); // works fine
console.log(rx.test('# abc')); // works fine
console.log(rx.test('abc abc!')); // works fine
console.log(rx.test('abc abc# abc')); // works fine
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...