Как проверять символы ТОЛЬКО в 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 в любой комбинации и должно иметь какое-то содержание.

На практике я могу ввести «a a», и проверка javascript не жалуется. Поскольку символ «пробел» находится не в AZ и не в AZ, что происходит?

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


person Chris Brandt    schedule 07.07.2009    source источник


Ответы (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>

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

person Tomalak    schedule 07.07.2009

лично я бы не стал использовать встроенный 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>
person Nick Van Brunt    schedule 07.07.2009
comment
Спасибо за вариант (и пример кода). На данный момент и для нас достаточно окна оповещения. - person Chris Brandt; 07.07.2009
comment
Для всех, кто ищет лучший способ проверки, я бы порекомендовал функции проверки jquery. Простой и ненавязчивый, но мощный и настраиваемый. - person Adam Tuttle; 08.07.2009
comment
Я второй совет jquery. Я не упомянул об этом, потому что javascript уже выходил за рамки вопроса, и я хотел, чтобы он был простым. - person Nick Van Brunt; 08.07.2009

<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>

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

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

person percy    schedule 24.11.2010

Наткнулся на эту статью, когда искал собственное решение. Нужен ненавязчивый способ, чтобы люди не вводили что-либо цифрами в одно поле и ничего, кроме букв, цифр или пробелов, в другие поля. Я не мог использовать 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)" в своих атрибутах.

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

person WiWildcat    schedule 21.02.2014