Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.03.2024, 17:50
Интересующийся
Отправить личное сообщение для Icons Посмотреть профиль Найти все сообщения от Icons
 
Регистрация: 25.08.2015
Сообщений: 11

Перевод тернарной бороды в человеко-понятный else/if
Привет!
Не могу перевести данный кусок кода в нормальный else/if.
Видел тернарники, но такие...
Что должна возвращать эта функция одному Богу известно и автору этого скрипта.
function validateString(input, arProperty, fieldName) {
                    if (!input || !arProperty) return [];
                    var value = input.value,
                        errors = [],
                        name = BX.util.htmlspecialchars(arProperty.NAME),
                        field = fieldName ? BX.message("SOA_FIELD") + ' "' + name + '"' : BX.message("SOA_FIELD"),
                        re;
                    return "Y" === arProperty.MULTIPLE
                        ? errors
                        : ("Y" === arProperty.REQUIRED && 0 === value.length && errors.push(field + " " + BX.message("SOA_REQUIRED")),
                          value.length &&
                              (arProperty.MINLENGTH &&
                                  arProperty.MINLENGTH > value.length &&
                                  errors.push(BX.message("SOA_MIN_LENGTH") + ' "' + name + '" ' + BX.message("SOA_LESS") + " " + arProperty.MINLENGTH + " " + BX.message("SOA_SYMBOLS")),
                              arProperty.MAXLENGTH &&
                                  arProperty.MAXLENGTH < value.length &&
                                  errors.push(BX.message("SOA_MAX_LENGTH") + ' "' + name + '" ' + BX.message("SOA_MORE") + " " + arProperty.MAXLENGTH + " " + BX.message("SOA_SYMBOLS")),
                              "Y" === arProperty.IS_EMAIL &&
                                  ((input.value = value = BX.util.trim(value)),
                                  value.length && ((re = /^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i).test(value) || errors.push(BX.message("SOA_INVALID_EMAIL")))),
                              value.length > 0 && arProperty.PATTERN && arProperty.PATTERN.length && ((re = new RegExp(arProperty.PATTERN)).test(value) || errors.push(field + " " + BX.message("SOA_INVALID_PATTERN")))),
                          errors);
                }
Ответить с цитированием
  #2 (permalink)  
Старый 19.03.2024, 19:22
Аватар для deniscikasov@gmail.com
Аспирант
Отправить личное сообщение для deniscikasov@gmail.com Посмотреть профиль Найти все сообщения от deniscikasov@gmail.com
 
Регистрация: 14.03.2023
Сообщений: 82

Я к нему обращаюсь в таких случаях
Нейросеть[помощник программиста] - https://www.blackbox.ai/
Ответить с цитированием
  #3 (permalink)  
Старый 19.03.2024, 19:45
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,794

Сгенерировано сервисом, который посоветовал deniscikasov@gmail.com, и вроде нормально заменил тернарные операторы на классические if else:
function validateString(input, arProperty, fieldName) {
    if (!input || !arProperty) return [];

    var value = input.value,
        errors = [],
        name = BX.util.htmlspecialchars(arProperty.NAME),
        field = fieldName ? BX.message("SOA_FIELD") + ' "' + name + '"' : BX.message("SOA_FIELD"),
        re;

    if (arProperty.MULTIPLE === "Y") {
        // Do nothing, just return the empty errors array
        return errors;
    }

    if (arProperty.REQUIRED === "Y" && value.length === 0) {
        errors.push(field + " " + BX.message("SOA_REQUIRED"));
    }

    if (value.length > 0) {
        if (arProperty.MINLENGTH && arProperty.MINLENGTH > value.length) {
            errors.push(BX.message("SOA_MIN_LENGTH") + ' "' + name + '" ' + BX.message("SOA_LESS") + " " + arProperty.MINLENGTH + " " + BX.message("SOA_SYMBOLS"));
        }

        if (arProperty.MAXLENGTH && arProperty.MAXLENGTH < value.length) {
            errors.push(BX.message("SOA_MAX_LENGTH") + ' "' + name + '" ' + BX.message("SOA_MORE") + " " + arProperty.MAXLENGTH + " " + BX.message("SOA_SYMBOLS"));
        }

        if (arProperty.IS_EMAIL === "Y") {
            input.value = value = BX.util.trim(value);

            if (value.length > 0 && !(/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i).test(value)) {
                errors.push(BX.message("SOA_INVALID_EMAIL"));
            }
        }

        if (arProperty.PATTERN && arProperty.PATTERN.length > 0) {
            re = new RegExp(arProperty.PATTERN);

            if (!re.test(value)) {
                errors.push(field + " " + BX.message("SOA_INVALID_PATTERN"));
            }
        }
    }

    return errors;
}
Ответить с цитированием
  #4 (permalink)  
Старый 19.03.2024, 21:42
Интересующийся
Отправить личное сообщение для Icons Посмотреть профиль Найти все сообщения от Icons
 
Регистрация: 25.08.2015
Сообщений: 11

До чего техника дошла..
Спасибо огромное!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск