2010-10-20 4 views
2

Я использую ниже фрагмент кода для проверки ввода строки с помощью: только заглавных букв, цифр и двух специальных символов (это & и Ñ) & без пробелов между ними.Regex для проверки только заглавных букв, двух специальных символов (& и Ñ) и без пробелов между

var validpattern = new RegExp('[^A-Z0-9\d&Ñ]'); 
if (enteredID.match(validpattern)) 
    isvalidChars = true; 
else 
    isvalidChars = false; 

Тест 1:. "XAXX0101%&&$#" должен терпеть неудачу т.е. isvalidChars = false; (поскольку он содержит недопустимые символы, такие как %$#

Тест 2:. "XAXX0101&Ñ3Ñ&" должен пройти

Тест 3: "XA 87B" должен терпеть неудачу, поскольку она содержит пространство между

Вышеуказанный код не работает, может ли кто-нибудь помочь мне выправить указанное выше регулярное выражение.

+3

Как насчет вашего [предыдущего вопроса] (http://stackoverflow.com/questions/3976420)? – Gumbo

+1

Возможно, вы должны удалить отрицание ^. – Ikaso

ответ

11

Это происходит потому, что у вас есть отрицание (^) внутри класс персонажа.

Что вы хотите: ^[A-Z0-9&Ñ]+$ или ^[A-Z\d&Ñ]+$

Внесены изменения:

  • [0-9] такой же, как \d. Поэтому используйте любой из них, а не оба, хотя неправильно использовать оба варианта, это избыточно.
  • Добавлен начать якорь (^) и конец якоря ($), чтобы соответствовать строке в всего не Части его.
  • Добавлен квантификатор +, так как класс персонажей соответствует одиночный знак.
+0

поддерживается с помощью^и $, который применяет регулярное выражение для всей строки. – skyfoot

+0

Спасибо, это работает как ожидалось :-). – Biki

+0

Спасибо за объяснение, но дайте мне знать, какая часть регулярного выражения отвечает за проверку пробелов? – Biki

1

Если вы хотите иметь правильные шаблоны, вы должны удалить ^ в диапазоне символов.

[A-Z0-9\d&Ñ]

3
^[A-Z\d&Ñ]+$ 

0-9 не требуется.

+1

+1 для более простой формы. – Ikaso

-1

С помощью JQuery мы могли бы добиться того же в одной строке:

$('#txtId').alphanumeric({ allow: " &Ñ" }); 

Использование регулярных выражений (как указано на codaddict), мы можем достичь того же с помощью

var validpattern = new RegExp('^[A-Z0-9&Ñ]+$'); 

Спасибо всем за драгоценный ответ добавленным ,

+0

Эта вещь «в одной строке» не является полезной метрикой «хорошего кода». Часто более высокое количество более коротких строк дает читателям лучшее понимание ваших намерений (и больше возможностей для рефакторинга позже). Однако ... если вы хотите использовать однострочный «чистый JS», попробуйте что-то на основе: 'isvalidChars =/^ [A-Z0-9 & С] + $ /. Test (inputID)'. Это работает, потому что JS поддерживает литералы RegEx. –

Смежные вопросы