Синтаксис регулярных выражений для строки - PullRequest
0 голосов
/ 17 декабря 2010

У меня есть регулярное выражение, которое я пытаюсь использовать для проверки по строкам. Попытка перехватить все, что не является: верхний регистр букв, число, -, /, не содержит пробелов и должен быть длиной не менее 4 символов и не превышать 78.

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

Пока это то, что у меня есть:

var turkey = new RegExp('^(\S[A-Z0-9-/]{4,78})$'); 
if (turkey.test(serialNumber)) {
    alert('pass');
}
else {
    alert('fail');
}

Pass:

AS4345-ADFSF / ASDF-445

D / -F4

/ ER45-DFGH334 / 45-4FS

Сбой:

aDF345 # SD / пт

45-фг / 422 фгс

2SD

г-5 * 1 028 *

Ответы [ 2 ]

2 голосов
/ 17 декабря 2010

Я думаю, вы должны потерять \S.

Регулярное выражение, которое у вас есть, совпадает с new RegExp('^(S[A-Z0-9-/]{4,78})$') и соответствует строкам типа "S-AWFL / 12".

Если вы добавите еще одну обратную косую черту (new RegExp('^(\\S[A-Z0-9-/]{4,78})$'), регулярное выражение станет таким же, как /^(\S[A-Z0-9-\/]{4,78})$')/. Затем вы сопоставите все, что начинается с одного символа, который не является пробелом, а затем ваш код из 4-78 символов. ! 23ASF - // "будет соответствовать, но не" 23ASF - // ".

0 голосов
/ 17 декабря 2010

В процессе устранения всего, что должно попадать в A-Z, /.или дефис (-) автоматически не является пробелом, поэтому проверять не нужно.

Сказав это, ваш шаблон выглядит правильно, но вы должны поставить дефис в качестве последнего символа в классеили избегайте его, иначе регулярное выражение захочет рассматривать его как разделитель диапазона.

Что-то вроде: ^[0-9A-Z\/-]{4,78}$ должно соответствовать вашим потребностям.

РЕДАКТИРОВАТЬ: Исправлено регулярное выражение для использования сNET's RegEx (отброшены символы группировки)

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