Ну, есть два способа определения регулярных выражений в Javascript:
а. Через конструктор объекта Regexp:
var re = new RegExp("pattern","flags");
re.test(myTestString);
б. Использование строкового литерала:
var re = /pattern/flags;
Следует также отметить, что JS не поддерживает некоторые принципы регулярных выражений. Полный список функций, не поддерживаемых в JS, можно найти на сайте регулярные выражения.info .
В частности, вы, кажется, устанавливаете некоторые флаги в выражении (например, флаг без учета регистра). Я бы предложил использовать флаг /i
(как указано в синтаксисе выше) вместо использования (?-i)
Это сделало бы ваше регулярное выражение следующим образом (положительный взгляд в будущее поддерживается):
/^(?=.{8,20})(?=.*[2-9])(?=.*[a-hj-km-np-z])(?=.*[A-HJ-KM-NP-Z])(?=.*[#@!$%])[2-9a-hj-km-np-zA-HJ-KM-NP-Z#@!$%]*$/i;
Для очень хорошей статьи на эту тему, посмотрите Регулярные выражения в JavaScript .
Редактировать (после комментария Говарда)
Если вы просто назначаете этот шаблон Regex для элемента управления RegularExpressionValidator, то у вас не будет возможности устанавливать параметры Regex (например, игнорировать регистр). Кроме того, вы не сможете использовать литеральный синтаксис Regex, поддерживаемый Javascript. Таким образом, единственный вариант, который остается, - сделать ваш шаблон по сути нечувствительным к регистру. Например, [a-h]
должно быть записано как [A-Ha-h]
. Извините, я бы сказал, что ваш Regex довольно скучный.
Вот решение этой проблемы, хотя я не могу ручаться за ее легитимность. Некоторые другие варианты, которые приходят на ум, могут заключаться в том, чтобы полностью отключить проверку на стороне Клиента и проверить только на Сервере. Это даст вам доступ ко всей версии Regex, реализованной объектом System.Text.RegularExpressions.Regex
. В качестве альтернативы, используйте CustomValidator и создайте свою собственную функцию JS, которая применяет совпадение с регулярным выражением, используя предложенные мной (и другими) шаблоны.