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