1С: проверка вилидности email и пароля
Ну например можно организовать вот так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
Функция ПарольСоответствуетТребованиям (Пароль) экспорт УстановитьПроверкуСложностиПаролейПользователей(Истина); ВременныйПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); ВременныйПользовательИБ.АутентификацияСтандартная = Истина; ВременныйПользовательИБ.Имя = НСтр("ru = 'Временный пользователь'")+ " (" + Строка(Новый УникальныйИдентификатор) + ")"; ВременныйПользовательИБ.Пароль = Пароль; ХорошийПароль = Истина; Попытка ВременныйПользовательИБ.Записать(); Исключение ХорошийПароль = Ложь; КонецПопытки; ВременныйПользовательИБ.Удалить(); Возврат ХорошийПароль; КонецФункции Функция ПроверкаВалидностиEmail(Адрес) Экспорт ЛатинскиеБуквы = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; Цифры = "0123456789"; //ищем крайний справа символ @ для правильного выделения локальной и доменной части ИндексСобаки = Найти(Адрес,"@"); //1. строка адреса вообще не содержит разделителя Если ИндексСобаки = 0 Тогда Возврат ЛОЖЬ; КонецЕсли; УрезаемаяСтрока = Сред(Адрес, ИндексСобаки+1); Пока Найти(УрезаемаяСтрока,"@") > 0 Цикл ИндексСобаки = ИндексСобаки + Найти(УрезаемаяСтрока,"@"); УрезаемаяСтрока = Сред(УрезаемаяСтрока, ИндексСобаки+1); КонецЦикла; ДоменнаяЧасть = Сред(Адрес, ИндексСобаки+1); ЛокальнаяЧасть = Лев(Адрес, ИндексСобаки-1); //2. Проверяем длину локальной части Если СтрДлина(ЛокальнаяЧасть) < 1 ИЛИ СтрДлина(ЛокальнаяЧасть) > 64 Тогда Возврат ЛОЖЬ; КонецЕсли; //3. Проверяем длину доменной части Если СтрДлина(ДоменнаяЧасть) < 1 ИЛИ СтрДлина(ДоменнаяЧасть) > 255 Тогда Возврат ЛОЖЬ; КонецЕсли; //4. Проверяем что локальная части не начинается и не заканчивается на "." Если Лев(ЛокальнаяЧасть, 1) = "." ИЛИ Прав(ЛокальнаяЧасть, 1) = "." Тогда Возврат ЛОЖЬ; КонецЕсли; //5. Локальная части не содержит 2 или более "." подряд Если Найти(ЛокальнаяЧасть, "..") > 0 Тогда Возврат ЛОЖЬ; КонецЕсли; //Проверка доменной части //6. Доменная часть не начинается с точки Если Лев(ДоменнаяЧасть, 1) = "." Тогда Возврат ЛОЖЬ; КонецЕсли; //7. Доменная часть не содержит 2 или более "." подряд Если Найти(ДоменнаяЧасть, "..") > 0 Тогда Возврат ЛОЖЬ; КонецЕсли; //8. Проверка частей доменной части //каждая часть начинается с буквы и заканчивается буквой или цифрой //каждая часть длиной не более 63 символов ИдентификаторыДоменнойЧасти = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ДоменнаяЧасть, "."); Для Каждого ИдентификаторДомена ИЗ ИдентификаторыДоменнойЧасти Цикл Если СтрДлина(ИдентификаторДомена) > 63 Тогда Возврат ЛОЖЬ; КонецЕсли; Если Найти(ЛатинскиеБуквы, Лев(ИдентификаторДомена,1)) = 0 //для доменов, нарушающих RFC 1035 п.2.3.1, например @1c.ru :) И Найти(Цифры, Лев(ИдентификаторДомена,1)) = 0 Тогда Возврат ЛОЖЬ; КонецЕсли; Если Найти(ЛатинскиеБуквы, Прав(ИдентификаторДомена,1)) = 0 И Найти(Цифры, Прав(ИдентификаторДомена,1)) = 0 Тогда Возврат ЛОЖЬ; КонецЕсли; КонецЦикла; //Все проверки пройдены - радуемся Возврат ИСТИНА; КонецФункции |