Как проверять символы ТОЛЬКО в ColdFusion CFForm?

У меня есть очень простая cfform с одним полем формы:

<cfform action="asdf.cfm" method="post">
  <cfinput name="fieldName" type="text" size="20" maxlength="20" required="yes" validate="regex" pattern="[A-Za-z]" message="Only characters are allowed." />
  <input type="submit" name="btnSubmit" value="check" />
</cfform>

Теоретически, это позволило бы ТОЛЬКО AZ и az в любой комбинации, и должно иметь некоторое содержание в нем.

На практике я могу ввести "аа", и проверка подлинности JavaScript не жалуется. Поскольку символ "пробел" не в азимуте и не в азимуте, что происходит?

Спасибо! Крис

4 ответа

Решение

Вам не хватает якорей начала строки и конца строки:

^[A-Za-z]$

или, более вероятно:

^[A-Za-z]{1,20}$

Ваш образец, модифицированный:

<cfform action="asdf.cfm" method="post">
  <cfinput name="fieldName" type="text" size="20" maxlength="20" required="yes" validate="regex" pattern="^[A-Za-z]{1,20}$" message="Only characters are allowed." />
  <input type="submit" name="btnSubmit" value="check" />
</cfform>

Без этих якорей регулярное выражение просто должно совпадать где угодно, ему не нужно совпадать полностью.

Лично я бы не использовал встроенный javascript для Coldfusion. У вас будет намного больше контроля, если вы сделаете свой собственный бросок, и это даст вам возможность отображать ошибки другими способами, кроме окна предупреждения.

<script>
function checkit() {
    var v = document.getElementById("text1").value;
    if(!v.match(/^[a-zA-Z]+$/)) {
        alert(v + ' contains invalid characters');
        return false;
    }
    return true;
}
</script>
<form onsubmit="return checkit()">
<input type="text" id="text1">
<input type="submit">
</form>
<script>
function checkit() {
    var v = document.getElementById("text1").value;
    if(!v.match(/^[a-zA-Z\\ \\.\\]+$/)) {
        alert(v + ' contains invalid characters');
        return false;
    }
    return true;
}
</script>
<form onsubmit="return checkit()">
<input type="text" id="text1">
<input type="submit">
</form>

Здесь также можно ввести и указать, но как я должен поступить, чтобы примирить меня.

Конечно, спасибо за помощь, вы очень помогаете.

Наткнулся на эту статью, пока искал собственное решение. Нужен ненавязчивый способ не дать людям вводить что-либо с помощью чисел в одном поле и ничего, кроме букв, цифр или пробелов в других полях. Я не мог использовать pattern="9999" для чисел, так как это не было обязательным полем, и люди "кричали", если они переходят через это поле. Аналогично, не удалось использовать pattern="xxx" для буквенно-цифровых полей, так как мне также нужно было разрешить пробелы.

Перескочив из этой статьи и используя javascript, который предыдущие программисты разрабатывали для этого клиента, я придумал эти прекрасные обработчики, подумал, что поделюсь, если кому-то еще понадобится это элегантное решение и ТАКЖЕ, потому что иногда я забываю и смогу найти это снова.

Либо в файле.js, который вы включаете, либо в тегах:

    function numChecker(e)
    {
      if (!e.value.match(/^[0-9]+$/))
      {
        e.value = e.value.substring(0.e.value.length -1 );
        e.focus();
        return false;
      }
      return true;
    }
    function charChecker(e)
    {
      if (!e.value.match(/^[a-zA-Z0-9\ ]+$/))
      {
        e.value = e.value.substring(0.e.value.length-1);
        e.focus();
        return false;
      }
      return true;
    }

Тогда ваши поля ввода или cfinput будут иметь OnKeyUp="numChecker(this)" или же OnKeyUp="charChecker(this)" в их атрибутах.

Когда люди печатают, если они вводят недопустимый символ, этот скрипт включается и просто удаляет этот плохой символ. Нет лишних кнопок, чтобы нажимать или оповещения, чтобы отклонить.

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