Обрезать пробелы из формы ввода? - PullRequest
6 голосов
/ 14 ноября 2011

Здравствуйте, поэтому я пытаюсь обрезать пробелы, когда пользователь вводит пробелы, он получает сообщение об ошибке, объясняющее, что он должен вводить действительные символы, но если он использовал: ' test ' то же самое значение вводится в базу данных, мне нужнообрезать это снова в JavaScript?

function validateForm()
{
    if(trim(document.insert.aname.value) ==="")
    {
      alert("Animal should have a name");
      document.insert.aname.focus();
      return false;
    }
}
function trim(value) {
    return value.replace(/^\s+|\s+$/g,"");
}

пожалуйста, вы можете помочь?страница ввода - .JSP

Ответы [ 3 ]

9 голосов
/ 14 ноября 2011

Вы на самом деле не обрезаете ввод. Вы хотите это:

//store the input in a variable
var nameInput = document.insert.aname

function validateForm() {
    //Get the trimmed name
    var animalName = trim(nameInput.value)

    if(animalName) {
        //Update the form with the trimmed value, just before the form is sent
        nameInput.value = animalName
    }
    else {
         //Trimmed value is empty
         alert("Animal should have a name");
         nameInput.focus();
         return false;
    }
}

function trim(value) {
    return value.replace(/^\s+|\s+$/g,"");
}
5 голосов
/ 14 ноября 2011

Во-первых, я собираюсь предложить несколько незапрошенных советов :) Даже если ваш код javascript обрезает ввод от пользователя, вы не можете гарантировать, что этот код будет всегда работать. Например, пользователь может отключить JavaScript в своем браузере или просто использовать библиотеку (их существует много) для программного отправки данных формы без использования какого-либо браузера.

Итак, вы всегда должны обрезать ввод на стороне сервера (в вашем случае, в JSP). В производственных системах вам нужно сделать немного больше, чем просто обрезку, вам также нужно проверить максимальные размеры и типы данных (поэтому, если ваш JSP требует числового ввода, вы должны проверить это)

Это означает, что вам, по сути, нужно выполнить проверку данных дважды. Проверка данных, которую вы выполняете в браузере, помогает пользователю и должна показывать удобное сообщение, когда вводится что-то недопустимое. Важной концепцией является то, что проверка браузера не предназначена для обеспечения безопасности, поскольку она не обеспечивает никакой. Безопасность обеспечивается проверкой на стороне сервера. Для проверки на стороне сервера не так важно предоставлять удобную обратную связь; хорошо, если это так, но это не главный приоритет.

Теперь к вашему вопросу. Когда вы звоните что-то вроде

trim(document.insert.aname.value)

это не меняет значение в форме. Он просто возвращает урезанную версию данных формы. Поэтому, когда вы отправляете форму, пробел в конце 'test' совпадает с данными формы.

Для javascript возможно манипулировать тем, что находится в форме, но это обычно не делается и не рекомендуется. Итак, подведем итог:

  1. Ваш код не удаляет завершающий пробел для предоставленных пользователем данных
  2. Вы можете изменить свой код, чтобы сделать это, но это не будет хорошей идеей, поскольку вам придется выполнять обрезку на сервере независимо от того,
  3. Поэтому вам нужно обрезать его на сервере

Надеюсь, это поможет. Фил

1 голос
/ 14 ноября 2011

Эй, вы можете использовать функцию jQuery.trim для этого:

var str = " a  ";
str = $.trim(str)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...