Как мы можем выполнить проверку формы на стороне сервера, используя преимущества атрибутов HTML5, как это можно сделать в JS/jQuery?

Вот немного кода JS/jQuery, который в основном проходит и "подхватывает" любые поля, помеченные атрибутом HTML5 "required" или "pattern". Затем он добавляет класс "error", чтобы привлечь внимание пользователя и т. Д.

$('[required], [pattern').each(function () { // if field is required, we must add .has-error when $(document).ready. We must also add a focus listener to test the pattern and replace .has-error with .has-success, as needed.
    if (($(this).attr('required') !== false) && ($(this).val() === "")) {
        var formGroup;
        formGroup = $(this).closest('.form-group');

        formGroup.addClass('has-error'); // .has-error must be added to a .form-group. Use closest() to traverse up DOM starting with $(this) and find the parent .form-group.      

        $(this).focus(function () { /* .has-error now has focus listener. On focus/blur, we will be testing for an opportunity to have validData, and, subsequently add .has-success */

            // We don't want to confuse the user while they are in the field, so let's remove .has-error/.has-success
            formGroup.removeClass('has-error'); // upon focus, immediately remove .has-error
            formGroup.removeClass('has-success'); // upon focus, immediately remove .has-success
        }); // end focus

        $(this).blur(function () { // on blur, check for '' val.

            if ($(this).val() === "") { // if val() is '', bring back .has-error.
                formGroup.addClass('has-error');

                // Otherwise, if there is a value, we'll need to check for a pattern.
            } else if (!$(this).attr('pattern')) { /* If there is no pattern (we have already established that a value is present), no further testing is required. Go ahead with .has-success. */
                formGroup.addClass('has-success');

            } else { // If we have made it here, val is not blank, and we have a pattern to go with it.

                /* Sometimes a 'general' use fxn. like this might be better served as a fxn. in plugins.js. However, this regExp testing is only used here. Should this change, we can 'externalize' this algorithm */
                var regExp = new RegExp($(this).attr('pattern')); // pull the regexp from fg's pattern attrib.

                /* Unfortunately, it seems that test() only check to see if the pattern is found, and doesn't account for whether or not there are extraneous characters that shouldn't be there. */
                if (regExp.test($(this).val())) { // if match is good, add .has-success {
                    formGroup.addClass('has-success');
                } else { // Pattern doesn't match!
                    formGroup.addClass('has-error');
                } // if-else
            } // end if-else if-else
        }); // end blur
        // if validData = true, add .has-success (and vice-versa).
    } // end if 
}); // end each

Это подводит меня к основному вопросу моего вопроса PHP. В большинстве примеров, которые я видел для проверки PHP на стороне сервера, код PHP просто использует серию операторов if-else для "разбора" идентификатора формы 1 за раз и выполняет его проверку, будь то регулярное выражение, просто требуется или что угодно.

Это кажется немного неэффективным. Кажется, что, подобно JS/jQuery, мы должны быть в состоянии построить массив полей формы 'required/pattern' или иным образом пройти по ним циклы, а затем использовать 'общие' сообщения или строковые переменные для генерации сообщений об ошибках для отправки обратно. пользователю.

Другими словами, вместо того, чтобы делать:

if(trim($name)=="") {
        $error = "Your name is required.";
    } elseif(trim($email)=="") {
        $error = "Your e-mail address is required.";
    } elseif(!isEmail($email)) {
        $error = "You have entered an invalid e-mail address.";

Мы должны просто перебрать все, что помечено как "обязательное" (HTML5), и выплюнуть что-то вроде: "Поле" + #ID + "является обязательным".

Точно так же мы должны иметь возможность циклически проходить через что-либо с атрибутом "pattern", извлекать регулярное выражение, проверять его с помощью PHP, а затем, используя атрибут "title" (HTML5), отправлять что-то обратно, например: "The " + #ID + "поле" + .

Как можно "очистить" код PHP, избегая нескольких операторов if-else и вместо этого используя преимущества атрибутов HTML5 для циклов, для выполнения его валидации (проверок)?

0 ответов

Другие вопросы по тегам