@ -22,24 +22,6 @@ function validate_length(val, dest_len){
$ ( document ) . ready ( function ( ) {
$ ( document ) . ready ( function ( ) {
const validateEmail = ( email ) => {
return email . match (
/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
) ;
} ;
const validate = ( ) => {
const email = $ ( '#email' ) . val ( ) ;
if ( validateEmail ( email ) ) {
$ ( '#email' ) . parent ( ) . removeClass ( 'errors-field' ) . addClass ( 'success-field' ) ;
} else {
$ ( '#email' ) . parent ( ) . removeClass ( 'success-field' ) . addClass ( 'errors-field' ) ;
}
return false ;
}
$ ( '#email' ) . on ( 'input' , validate ) ;
$ ( 'body' ) . append ( '<div id="error_alert" class="alert alert-danger" role="alert" style="position: fixed; top: 50px; left: 10%; right: 10%; z-index: 9999; display: none;">Ошибка<br><small id="alert_error_text"></small></div>' ) ;
$ ( 'body' ) . append ( '<div id="error_alert" class="alert alert-danger" role="alert" style="position: fixed; top: 50px; left: 10%; right: 10%; z-index: 9999; display: none;">Ошибка<br><small id="alert_error_text"></small></div>' ) ;
$ ( 'body' ) . append ( '<div id="success_alert" class="alert alert-success" role="alert" style="position: fixed; top: 50px; left: 10%; right: 10%; z-index: 9999; display: none;">Успех<br><small id="alert_success_text"></small></div>' ) ;
$ ( 'body' ) . append ( '<div id="success_alert" class="alert alert-success" role="alert" style="position: fixed; top: 50px; left: 10%; right: 10%; z-index: 9999; display: none;">Успех<br><small id="alert_success_text"></small></div>' ) ;
@ -71,13 +53,6 @@ $(document).ready(function(){
} ) ;
} ) ;
$ ( '#email' ) . on ( 'input' , function ( ) {
let input = $ ( this ) . val ( ) ;
// Разрешаем только буквы, цифры, точки, дефисы и подчеркивания
input = input . replace ( /[^a-zA-Z0-9._@-]/g , '' ) ;
// Обновляем поле ввода
$ ( this ) . val ( input ) ;
} ) ;
$ ( '#tel' ) . on ( 'change' , function ( ) {
$ ( '#tel' ) . on ( 'change' , function ( ) {
if ( $ ( this ) . val ( ) . length != 16 ) {
if ( $ ( this ) . val ( ) . length != 16 ) {
@ -87,132 +62,18 @@ $(document).ready(function(){
}
}
} ) ;
} ) ;
// Проверка на дату рождения (не старше 80 лет)
$ ( '#dob' ) . on ( 'change' , function ( ) {
const dob = new Date ( $ ( this ) . val ( ) ) ;
const currentDate = new Date ( ) ;
const age = currentDate . getFullYear ( ) - dob . getFullYear ( ) ;
// Проверка на возраст (не старше 80 лет)
if ( age > 80 || ( age === 80 && ( currentDate . getMonth ( ) < dob . getMonth ( ) || ( currentDate . getMonth ( ) === dob . getMonth ( ) && currentDate . getDate ( ) < dob . getDate ( ) ) ) ) ) {
// Если возраст больше 80 лет, подсвечиваем ячейку как ошибку
$ ( this ) . parent ( ) . removeClass ( 'success-field' ) . addClass ( 'errors-field' ) ;
} else {
// Если возраст нормален, подсвечиваем ячейку как успешную
$ ( this ) . parent ( ) . removeClass ( 'errors-field' ) . addClass ( 'success-field' ) ;
}
} ) ;
$ ( '#address' ) . on ( 'input' , function ( ) {
$ ( "#dob" ) . attr ( 'maxlength' , '4' ) ;
let input = $ ( this ) . val ( ) ;
$ ( '#dob' ) . on ( 'input' , function ( ) {
// Преобразуем все символы в верхний регистр
input = input . toUpperCase ( ) ;
// Обновляем поле ввода
$ ( this ) . val ( input ) ;
// Проверяем формат: должно быть минимум 5 частей, разделённых запятыми
let parts = input . split ( ',' ) ;
if ( parts . length < 4 || parts . some ( part => part . trim ( ) . length === 0 ) ) {
$ ( this ) . parent ( ) . removeClass ( 'success-field' ) . addClass ( 'errors-field' ) ;
} else {
$ ( this ) . parent ( ) . removeClass ( 'errors-field' ) . addClass ( 'success-field' ) ;
}
} ) ;
$ ( '#residential_address' ) . on ( 'input' , function ( ) {
let input = $ ( this ) . val ( ) ;
// Преобразуем все символы в верхний регистр
input = input . toUpperCase ( ) ;
// Обновляем поле ввода
$ ( this ) . val ( input ) ;
// Проверяем формат: должно быть минимум 5 частей, разделённых запятыми
let parts = input . split ( ',' ) ;
if ( parts . length < 4 || parts . some ( part => part . trim ( ) . length === 0 ) ) {
$ ( this ) . parent ( ) . removeClass ( 'success-field' ) . addClass ( 'errors-field' ) ;
} else {
$ ( this ) . parent ( ) . removeClass ( 'errors-field' ) . addClass ( 'success-field' ) ;
}
} ) ;
// Проверка на дату выдачи паспорта (выдан после 14, 20 или 45 лет)
$ ( '#passport_date' ) . on ( 'change' , function ( ) {
const passportDate = new Date ( $ ( this ) . val ( ) ) ;
const dob = new Date ( $ ( '#dob' ) . val ( ) ) ;
// Проверка, что дата рождения введена и корректна
if ( ! dob || isNaN ( dob ) ) {
// Если дата рождения не введена или неверна, показываем ошибку
$ ( this ) . parent ( ) . removeClass ( 'success-field' ) . addClass ( 'errors-field' ) ;
return ;
}
const ageAtPassportIssue = passportDate . getFullYear ( ) - dob . getFullYear ( ) ;
// Проверка на возраст, в котором может быть выдан паспорт
if ( ageAtPassportIssue > 12 ) {
// Если возраст при выдаче паспорта соответствует требованиям, подсвечиваем ячейку как успешную
$ ( this ) . parent ( ) . removeClass ( 'errors-field' ) . addClass ( 'success-field' ) ;
} else {
// Если возраст не соответствует, показываем ошибку
$ ( this ) . parent ( ) . removeClass ( 'success-field' ) . addClass ( 'errors-field' ) ;
}
} ) ;
$ ( "#passport" ) . attr ( 'maxlength' , '12' ) ;
$ ( '#passport' ) . on ( 'input' , function ( ) {
let input = $ ( this ) . val ( ) ;
// Удаляем все символы, кроме цифр и пробелов
input = input . replace ( /\D/g , '' ) ;
// Форматируем ввод в "00 00 000000" с пробелами
if ( input . length > 2 && input . length <= 4 ) {
input = input . replace ( /(\d{2})(\d{0,2})/ , '$1 $2' ) ;
} else if ( input . length > 4 && input . length <= 10 ) {
input = input . replace ( /(\d{2})(\d{2})(\d{0,6})/ , '$1 $2 $3' ) ;
}
// Ограничиваем длину до "00 00 000000"
if ( input . length > 12 ) {
input = input . slice ( 0 , 12 ) ;
}
// Обновляем поле ввода
$ ( this ) . val ( input ) ;
// Проверка на минимальную длину (не менее 11 символов)
if ( input . length < 12 ) {
// Если введено меньше цифр, показываем ошибку
$ ( this ) . parent ( ) . removeClass ( 'success-field' ) . addClass ( 'errors-field' ) ;
} else {
// Если введено достаточно цифр, показываем успех
$ ( this ) . parent ( ) . removeClass ( 'errors-field' ) . addClass ( 'success-field' ) ;
}
} ) ;
$ ( '#postal_code' ) . on ( 'input' , function ( ) {
let input = $ ( this ) . val ( ) ;
let input = $ ( this ) . val ( ) ;
// Удаляем все символы, кроме цифр
// Удаляем все символы, кроме цифр
input = input . replace ( /\D/g , '' ) ;
input = input . replace ( /\D/g , '' ) ;
// Форматируем ввод в "000-000" только при наличии 4 и более цифр
if ( input . length > 3 ) {
input = input . replace ( /(\d{3})(\d{0,3})/ , '$1-$2' ) ;
}
// Ограничиваем длину до "000-000"
if ( input . length > 7 ) {
input = input . slice ( 0 , 7 ) ;
}
// Обновляем поле ввода
// Обновляем поле ввода
$ ( this ) . val ( input ) ;
$ ( this ) . val ( input ) ;
// Проверка на минимальную длину (не менее 11 символов)
// Проверка на минимальную длину (не менее 11 символов)
if ( input . length < 7 ) {
if ( input . length < 4 ) {
// Если введено меньше цифр, показываем ошибку
// Если введено меньше цифр, показываем ошибку
$ ( this ) . parent ( ) . removeClass ( 'success-field' ) . addClass ( 'errors-field' ) ;
$ ( this ) . parent ( ) . removeClass ( 'success-field' ) . addClass ( 'errors-field' ) ;
} else {
} else {
@ -221,64 +82,17 @@ $(document).ready(function(){
}
}
} ) ;
} ) ;
$ ( '#passport_issued_by' ) . select2 ( {
theme : 'bootstrap-5'
} ) ;
$ ( "#postal_code" ) . change ( function ( ) {
$ ( '#passport_issued_by' ) . empty ( ) ;
$ ( '#passport_issued_by' ) . append ( '<option disabled="" selected="">Кем выдан паспорт</option>' )
for ( i in UFMS _list [ $ ( this ) . val ( ) ] )
{
item = UFMS _list [ $ ( this ) . val ( ) ] [ i ] ;
$ ( '#passport_issued_by' ) . append ( '<option>' + item + '</option>' ) ;
}
// $('#passport_issued_by').select2("change");
} ) ;
$ ( '#snils' ) . on ( 'input' , function ( ) {
$ ( "#kod" ) . attr ( 'maxlength' , '4' ) ;
$ ( '#kod' ) . on ( 'input' , function ( ) {
let input = $ ( this ) . val ( ) ;
let input = $ ( this ) . val ( ) ;
// Удаляем все символы, кроме цифр
// Удаляем все символы, кроме цифр
input = input . replace ( /\D/g , '' ) ;
input = input . replace ( /\D/g , '' ) ;
// Форматируем ввод в "000-000-000-00" только после 3, 6, 9 цифр
if ( input . length > 3 && input . length <= 6 ) {
input = input . replace ( /(\d{3})(\d{0,3})/ , '$1-$2' ) ;
} else if ( input . length > 6 && input . length <= 9 ) {
input = input . replace ( /(\d{3})(\d{3})(\d{0,3})/ , '$1-$2-$3' ) ;
} else if ( input . length > 9 ) {
input = input . replace ( /(\d{3})(\d{3})(\d{3})(\d{0,2})/ , '$1-$2-$3-$4' ) ;
}
// Ограничиваем длину до "000-000-000-00"
if ( input . length > 14 ) {
input = input . slice ( 0 , 14 ) ;
}
// Обновляем поле ввода
// Обновляем поле ввода
$ ( this ) . val ( input ) ;
$ ( this ) . val ( input ) ;
if ( input . length < 14 ) {
// Если введено меньше цифр, показываем ошибку
$ ( this ) . parent ( ) . removeClass ( 'success-field' ) . addClass ( 'errors-field' ) ;
} else {
// Если введено достаточно цифр, показываем успех
$ ( this ) . parent ( ) . removeClass ( 'errors-field' ) . addClass ( 'success-field' ) ;
}
} ) ;
$ ( "#inn" ) . attr ( 'maxlength' , '12' ) ;
// Проверка на минимальную длину (не менее 11 символов)
$ ( '#inn' ) . on ( 'input' , function ( ) {
if ( input . length < 4 ) {
let input = $ ( this ) . val ( ) ;
// Убираем все символы, кроме цифр
input = input . replace ( /\D/g , '' ) ;
// Ограничиваем длину до 12 символов
if ( input . length > 12 ) {
input = input . slice ( 0 , 12 ) ;
}
// Обновляем значение в поле ввода
$ ( this ) . val ( input ) ;
if ( input . length < 12 ) {
// Если введено меньше цифр, показываем ошибку
// Если введено меньше цифр, показываем ошибку
$ ( this ) . parent ( ) . removeClass ( 'success-field' ) . addClass ( 'errors-field' ) ;
$ ( this ) . parent ( ) . removeClass ( 'success-field' ) . addClass ( 'errors-field' ) ;
} else {
} else {
@ -288,6 +102,7 @@ $(document).ready(function(){
} ) ;
} ) ;
$ ( "#form_submit" ) . click ( function ( ) {
$ ( "#form_submit" ) . click ( function ( ) {
$ ( this ) . children ( ".spinner-border" ) . removeClass ( 'd-none' ) ;
$ ( this ) . children ( ".spinner-border" ) . removeClass ( 'd-none' ) ;
$ ( this ) . attr ( "disabled" , true ) ;
$ ( this ) . attr ( "disabled" , true ) ;
message = { }
message = { }
@ -309,79 +124,13 @@ $(document).ready(function(){
return ;
return ;
}
}
if ( $ ( '#dob' ) . val ( ) . length !== 10 || new Date ( ) . getFullYear ( ) - new Date ( $ ( '#dob' ) . val ( ) ) . getFullYear ( ) > 80 ) {
if ( $ ( '#dob' ) . val ( ) . length !== 4 || new Date ( ) . getFullYear ( ) - new Date ( $ ( '#dob' ) . val ( ) ) . getFullYear ( ) > 80 ) {
show _error ( 'Дата рождения должна быть корректной и возраст не более 80 лет' , false ) ;
show _error ( 'Дата рождения должна быть корректной и возраст не более 80 лет' , false ) ;
$ ( this ) . children ( ".spinner-border" ) . addClass ( 'd-none' ) ;
$ ( this ) . children ( ".spinner-border" ) . addClass ( 'd-none' ) ;
$ ( this ) . removeAttr ( "disabled" ) ;
$ ( this ) . removeAttr ( "disabled" ) ;
return ;
return ;
}
}
if ( ! ( validateEmail ( $ ( '#email' ) . val ( ) ) ) ) {
show _error ( 'Введите корректный Email' , false ) ;
$ ( this ) . children ( ".spinner-border" ) . addClass ( 'd-none' ) ;
$ ( this ) . removeAttr ( "disabled" ) ;
return ;
}
if ( ! ( validate _length ( $ ( '#passport' ) . val ( ) , 12 ) ) )
{
show _error ( 'Введите серию и номер паспорта' , false ) ;
$ ( this ) . children ( ".spinner-border" ) . addClass ( 'd-none' ) ;
$ ( this ) . removeAttr ( "disabled" ) ;
return ;
}
if ( $ ( '#passport_date' ) . val ( ) . length !== 10 || ( new Date ( $ ( '#passport_date' ) . val ( ) ) . getFullYear ( ) - new Date ( $ ( '#dob' ) . val ( ) ) . getFullYear ( ) ) < 13 ) {
show _error ( 'Проверьте дату выдачи паспорта, паспорт РФ может быть выдан с 14 лет' , false ) ;
$ ( this ) . children ( ".spinner-border" ) . addClass ( 'd-none' ) ;
$ ( this ) . removeAttr ( "disabled" ) ;
return ;
}
if ( ! ( validate _length ( $ ( '#postal_code' ) . val ( ) , 7 ) ) )
{
show _error ( 'Введите код подразделения' , false ) ;
$ ( this ) . children ( ".spinner-border" ) . addClass ( 'd-none' ) ;
$ ( this ) . removeAttr ( "disabled" ) ;
return ;
}
if ( $ ( '#passport_issued_by' ) . val ( ) == null ) {
show _error ( "Выберите кем выдан паспорт" ) ;
$ ( this ) . children ( ".spinner-border" ) . addClass ( 'd-none' ) ;
$ ( this ) . removeAttr ( "disabled" ) ;
return ;
}
if ( $ ( '#address' ) . val ( ) . split ( ',' ) . length < 4 || $ ( '#address' ) . val ( ) . split ( ',' ) . some ( part => part . trim ( ) . length === 0 ) ) {
show _error ( 'Пожалуйста, введите адрес регистрации в следующем формате, используя заглавные буквы и расставляя все запятые:\nРЕГИОН, НАСЕЛЕННЫЙ ПУНКТ, УЛИЦА, ДОМ, КВАРТИРА' , false ) ;
$ ( this ) . children ( ".spinner-border" ) . addClass ( 'd-none' ) ;
$ ( this ) . removeAttr ( "disabled" ) ;
return ;
}
if ( $ ( '#residential_address' ) . val ( ) . split ( ',' ) . length < 4 || $ ( '#residential_address' ) . val ( ) . split ( ',' ) . some ( part => part . trim ( ) . length === 0 ) ) {
show _error ( 'Пожалуйста, введите адрес проживания в следующем формате, используя заглавные буквы и расставляя все запятые:\nРЕГИОН, НАСЕЛЕННЫЙ ПУНКТ, УЛИЦА, ДОМ, КВАРТИРА' , false ) ;
$ ( this ) . children ( ".spinner-border" ) . addClass ( 'd-none' ) ;
$ ( this ) . removeAttr ( "disabled" ) ;
return ;
}
if ( ! ( validate _length ( $ ( '#snils' ) . val ( ) , 14 ) ) )
{
show _error ( 'Введите СНИЛС' , false ) ;
$ ( this ) . children ( ".spinner-border" ) . addClass ( 'd-none' ) ;
$ ( this ) . removeAttr ( "disabled" ) ;
return ;
}
if ( ! ( validate _length ( $ ( '#inn' ) . val ( ) , 12 ) ) )
{
show _error ( 'Введите ИНН' , false ) ;
$ ( this ) . children ( ".spinner-border" ) . addClass ( 'd-none' ) ;
$ ( this ) . removeAttr ( "disabled" ) ;
return ;
}