Christopher Fernandes Ответов: 2

Как я могу преобразовать строку в регулярное выражение ехр правильное регулярное выражение ехр


у меня есть приведенный ниже JS код для проверки электронной почты

функция testMatch() {
var current = $(document). find ('#txtbox');
var ccount = 0;
var vcode = "/^[a-z0-9\_\-\.]+[\@]{1}[a-z0-9]+[\.]{1}[a-z]{2,}/i" /*это значение фактически исходит из запроса json*/
значение var = "useremail@gmail.com";
если (значение != неопределенные и усилитель; & значения != нуль &амп;&амп; значение != ") {
var res = value. match(vcode);
if (res = = null) {
США(по текущим).добавление('см-форме данныеоткройте-errorrow');
аккаунт++;
} еще {
$(current). removeClass ('cm-dataform-errorrow');
}
} еще {
США(по текущим).добавление('см-форме данныеоткройте-errorrow');
аккаунт++;
}
}

строка регулярного выражения извлекается из ajax-запроса.
поскольку регулярное выражение exp является строкой, функция match () не работает.
Как преобразовать строку regex exp в правильное регулярное выражение exp, которое может проверить ввод данных здесь.

Что я уже пробовал:

Я пробовал использовать методы Test(), exec() регулярных выражений

Wessel Beulink

/^[a-z0-9\_\-\.]+[\@]{1}[a-z0-9]+[\.]{1}[a-z]{2,}/i это также не является действительной проверкой почты. из-за новых доменов: .black и т. д.

Microsoft рекомендует следующее регулярное выражение:
@"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" + @"(?(\[) (\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z] [- \w]*[0-9a-z]*\.)+[a-z0-9] [\- a-z0-9]{0,22}[a-z0-9]))$"

См. эту статью: https://msdn.microsoft.com/en-us/library/01escwtf(v=vs. 110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

Но я должен просто проверить @ in со строкой.Содержать('@'). Вы также можете проверить наличие точки.

2 Ответов

Рейтинг:
13

Jochen Arndt

Вы должны создать RegExp объект:

var re = new RegExp(vcode, 'i');
var res = value.match(re);
Обратите внимание, что флаги передаются в качестве дополнительного параметра RegExp конструктор и поэтому должен быть удален из vcode строка.

Смотреть также RegExp-JavaScript | MDN[^]


Christopher Fernandes

Я имплементировал ваш код так, как выглядит re, когда код выполняется /\ / ^[a-z0-9\_\-\.]+[\@]{1}[a-z0-9]+[\.]{1}[a-z]{2,}\ / / i
это не работает, я имею в виду, даже если я ввожу действительный адрес электронной почты.

Jochen Arndt

Вы избежали всех специальных символов!
Ваша строка уже является допустимым регулярным выражением (надеюсь, я его не проверял). Передайте его как есть, но уберите замыкающее "я":

/^[a-z0-9\_\-\.]+[\@]{1}[a-z0-9]+[\.]{1}[a-z] {2,}/

Christopher Fernandes

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

Jochen Arndt

Теперь я это вижу.
Здесь, в CP, действительно есть ошибка с форматированием блока кода (теги br в блоках кода), и, похоже, есть что-то похожее с комментариями.


Чтобы проверить, работает ли регулярное выражение, я предлагаю начать с более простого и расширить его, пока оно работает.

Вы также можете использовать онлайн-парсер (serach для "онлайн-тестера регулярных выражений").

[РЕДАКТИРОВАТЬ]
Но есть и разница.
Ваша строка:
/\ / ^[a-z0-9\_\-\.]+[\@]{1}[a-z0-9]+[\.]{1}[a-z]{2,}\ / / i
Но так должно быть
/^[a-z0-9\_\-\.]+[\@]{1}[a-z0-9]+[\.]{1}[a-z] {2,}/
[/РЕДАКТИРОВАТЬ]

Откуда берется автоматическое бегство?
Встраиваемые косые черты также могут быть удалены:
^[a-z0-9\_\-\.]+[\@]{1}[a-z0-9]+[\.]{1}[a-z] {2,}

Christopher Fernandes

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

Christopher Fernandes

это сработало спасибо чувак

Jochen Arndt

Прекрасно слышать это и благодарить вас за обратную связь и принятие ответа.

Christopher Fernandes

Еще раз спасибо Бадди, который ломал мне голову уже 5 дней. :)

Рейтинг:
1

Christopher Fernandes

Вот как я это исправил. Я полоснул первую и последнюю косую черту вперед

var ccount = 0;
var vcode = ^[a-z0-9\_\-\.]+[\@]{1}[a-z0-9]+[\.]{1}[a-z]{2,}$
var value = "useremail@gmail.com";
var regex = new RegExp(vcode,'i');
if (value != undefined && value != null && value != '') {
    var res = regex.exec(vcode);
    if (res == null) {
        ccount++;
    } 
    else {
         /*Valid value do stuff here*/
    }
} 
else {
  ccount++;
}
}