Live email validation

Есть ли возможность накрутить такую проверку поля E-mail, что бы пользователь вводил именно свою почту. Суть проверки ввода ^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$, но как реализовать это в скрипте я не знаю.

Нравится

10 комментариев
var emailStr = "12@mail.com";
var emailRegEx = new RegExp("^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$");
var result=emailRegEx.test(emailStr);

Переменная result будет содержать true если строка emailStr удовлетворяет регулярному выражению, false в противном случае.

Большое спасибо, работает как надо

Работало... Теперь ни один емейл не проходит валидацию, пробовал несколько. Если оставлять валидацию пустой

var emailRegEx = new RegExp();

то все работает. Это значит проблема не в коде, а именно в валидации?

В скрипте указана проверка валидации E-mail'а (поле Communication"№"), если в соседнем поле Communication"№"TypeID введено требуемое значение (тип связи "Е-мейл"). При вводе E-mail'а, который визуально проходит валидацию, выскакивает сообщение об обратном. Есть ли ошибка в скрипте или просто не правильно настроена валидация?

function CheckCommunications(Dataset) {
   var Result = true;
   var ContactTypeID = Dataset.Values('ContactTypeID');
   var emailRegEx = new RegExp("<параметры валидации>"); //email validation
   if (ContactTypeID == '{47CBC6BB-D74E-4872-A488-75CC01122136}') {
 
 
//проверка, есть ли в одном из полей требуемая запись
       if ((Dataset('Communication1TypeID') != '{7A628D16-D7D0-4979-B8BA-B64EF54A0366}') && 
           (Dataset('Communication2TypeID') != '{7A628D16-D7D0-4979-B8BA-B64EF54A0366}')) { 
           Result = false;
 
        } else
 
 
//проверяет, если в поле введено требуемая запись, то соседнее поле не доложно быть пустым
       if ((Dataset('Communication1TypeID') == '{7A628D16-D7D0-4979-B8BA-B64EF54A0366}') && IsEmptyValue(Dataset('Communication1'))) {
           Result = false;  
 
        } else 
 
 
//Если в это поле введена требуемая запись то провести валидацию записи в соседнем поле
       if (Dataset('Communication1TypeID') == '{7A628D16-D7D0-4979-B8BA-B64EF54A0366}') { 
	   var emailStr=Dataset.Values('Communication1');
	   if (emailRegEx.test(emailStr) != true) {
	       Result = false;
	   } 
        } else 
 
        if ((Dataset('Communication2TypeID') == '{7A628D16-D7D0-4979-B8BA-B64EF54A0366}') && IsEmptyValue(Dataset('Communication2'))) {
           Result = false;
        } else
 
        if (Dataset('Communication2TypeID') == '{7A628D16-D7D0-4979-B8BA-B64EF54A0366}') { 
	   var emailStr=Dataset.Values('Communication2');
	   if (emailRegEx.test(emailStr) != true) {
	       Result = false;
	   } 
        } else          
 	return Result;
}
}

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

function CheckCommunications(Dataset) {
   var Result = false;
   var ContactTypeID = Dataset.Values('ContactTypeID');
   var emailRegEx = new RegExp("<параметры валидации>"); //email validation
   if (ContactTypeID == '{47CBC6BB-D74E-4872-A488-75CC01122136}') {
 
 
//проводит валидацию, если в поле введено требуемая запись и соседнее поле не пустое
       if ((Dataset('Communication1TypeID') == '{7A628D16-D7D0-4979-B8BA-B64EF54A0366}') && !IsEmptyValue(Dataset('Communication1'))) {
           var emailStr=Dataset.Values('Communication1');
           Result = emailRegEx.test(emailStr);
        } else 
 
        if ((Dataset('Communication2TypeID') == '{7A628D16-D7D0-4979-B8BA-B64EF54A0366}') && !IsEmptyValue(Dataset('Communication2'))) {
           var emailStr=Dataset.Values('Communication2');
           Result = emailRegEx.test(emailStr);
        }
}
return Result;
}

Этого должно быть достаточно.

Здесь у Вас перед финальным "return Result" стоит else. И если алгоритм попадает в ветку с фунцкией проверки e-mail, то метод не возвращает ничего. Нужно убрать else и на одну скобочку ниже поставить return Result.

if (Dataset('Communication2TypeID') == '{7A628D16-D7D0-4979-B8BA-B64EF54A0366}') { 
           var emailStr=Dataset.Values('Communication2');
           if (emailRegEx.test(emailStr) != true) {
               Result = false;
           } 
 }          
return Result;

В догонку обсуждение регулярок для проверки корректности введенного номера телефона.

"Глова Сергей" написал:

В догонку обсуждение регулярок для проверки корректности введенного номера телефона.


Попробовал из этого обсуждения выдернуть что-то для валидации телефонных номеров. На любом регулярном выражении, которое якобы должно проверять номер, выдает ошибку - "Неизвестный числовой показатель"...
проверка email-а проходит:

var emailRegEx = new RegExp("^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$");

а проверка номера телефона выдает указанную ошибку:

var phoneRegEx = new RegExp("((8|\+7)-?)?\(?\d{3,5}\)?-?\d{1}-?\d{1}-?\d{1}-?\d{1}-?\d{1}((-?\d{1})?-?\d{1})?");

может нужно как-то для Террасофта модифицировать?
Версия 3.0.2.244

попробуйте посмортреть на открытых ресурсах варианты выражений для валидации номеров телефонов.
например : a-comprehensive-regex-for-phone-number-validation

Господа, может это поможет в поиске правды: Справочник javascript: RegExp

Когда регулярное выражение создается при помощи конструктора new RegExp(), необходимо помнить, что обратные слеши (\) должны экранироваться, например:
var expr = new RegExp('\\w', 'ig');
Показать все комментарии