2015-01-16 2 views
2

Я очень новичок в ColdFusion, и мне было любопытно, может ли кто-нибудь сказать мне, как проверить, пусто ли поле формы или нет.ColdFusion, проверяющий пустые поля формы

Для примера скажем, мы устанавливаем его вверх, как это:

<cfinput 
    type="text" 
    name="firstName" 
    id="firstName" 
    value="#form.firstName#" 
> 

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

<cfif (form.firstName) EQ 0> 
+3

Нет смысла использовать 'cfinput' использовать регулярные' form' и 'input' теги для создания вашего HTML. –

+0

Помимо прямого ответа на ваш вопрос, вы всегда * хотите убедиться, что поле существует первым, поскольку проверка значения несуществующего поля в CF является ошибкой. Даже если вы думаете, что он всегда должен существовать, пользователь может использовать свои инструменты для браузера, чтобы изменить форму перед отправкой. Таким образом, вы можете использовать что-то вроде ''. Или вы можете использовать '', чтобы присвоить ему значение по умолчанию. – Josh

+0

В отношении вышеприведенного комментария нет причин использовать cfinput. Хотя я не использую cfinput, следует отметить, что в теге применяется форматирование HTML. Поэтому, если значение form.firstname содержит не дружественный символ HTML, то тег автоматически позаботится об этом. В противном случае, если этот код был изменен на простой вход, он должен по крайней мере быть также изменен на значение = "# HTMLEditFormat (form.firstName) #" – Snipe656

ответ

9

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

<cfif len(trim(form.firstName)) EQ 0> 
+1

* удалить все начальные или конечные пробелы. * .. и [управляющие символы] (https : //wikidocs.adobe.com/wiki/display/coldfusionen/Trim) FWIW – Leigh

1

Некоторые разработчики предпочитают проверять пустоту, проверяя сравнение с пустой строкой. См len(x) better or x NEQ "" better in CFML?

<cfif trim(form.firstName) NEQ ""> 

<cfscript> также вариант условия

<cfscript> 
    if (trim(form.firstName) != "") { 
     ... 

Yoda работать слишком

<cfscript> 
    if ("" != trim(form.firstName)) { 
+0

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

3

Самый простой способ:

<cfif form.firstName IS ""> 

Это просто проверяет, является ли указанное поле формы пустой строкой ("").

Другой способ написать то же самое будет:

<cfif len(form.firstName) EQ 0> 

Это проверяет, если длина значения поля формы является 0 (пустая строка). Этот второй метод можно немного сократить?

<cfif len(form.firstName)> 

Предположим, что форма.firstName пуста. Тогда это станет. В булевой оценке 0 ложно. Предполагая, что значение не было пустым, оно станет. Число, отличное от нуля, равно true.

+0

В ColdFusion 9, выдает эту ошибку: «Неверная конструкция CFML, найденная в строке 107 в столбце 17. ColdFusion просматривал следующий текст: ?" –

+1

Дэвид, две вещи: 'len (variable)' и 'len (variable) eq 0' противоположны (но вы можете использовать' not len ​​(variable) '). И Дэн явно прав, но? и «соседи на клавиатуре, вы, возможно, просто сделали простую опечатку. В любом случае, стоит исправить –

6

У меня всегда есть проверка в два раза. IsDefined оценивает строковое значение, чтобы определить, существует ли указанная в нем переменная.

<CFIF NOT IsDefined("FORM.firstname") OR 
     FORM.firstname EQ ""> 

Ссылка: http://help.adobe.com/livedocs/coldfusion/8/htmldocs/help.html?content=functions_in-k_14.html

+2

' StructKeyExists() 'будет лучшим вариантом. – Pankaj

+0

Я не обязательно соглашаюсь с вами, но можете ли вы поддержать это с помощью какая-то документация? – Mitch

+0

Я имею в виду вместо 'isDefined()' вы должны использовать 'StructKeyExists()'. Прочтите это https://forums.adobe.com/thread/491991?tstart=0 – Pankaj

-2

Во-первых, это довольно просто, если вы просто идете по основам ColdFusion. Но так как он здесь, я хотел бы добавить к ответам. В соответствии с вашим вопросом, вам нужно проверить, пусты ли поля формы, или нет. Чтобы это было ясно, ColdFusion обрабатывает значения empty и NULL так же.Так что, если вы просто хотите, чтобы проверить пустые значения, то почему бы не использовать этот простой код:

<cfif form.firstname EQ ''> 
    <!--- code, if it's empty ---> 
<cfelse> 
    <!--- code, if not empty ---> 
</cfif> 

ИЛИ, чтобы быть уверенным, что все пробельные символы рассматриваются как пустая строка, а также, здесь полное решение (обратите внимание, что мы используем функцию с регулярным выражением заменить с помощью функции reReplace в ColdFusion):

<cfif reReplace(form.firstName, "[[:space:]]", "", "ALL") EQ '' /> 
    <!--- code, if it's empty ---> 
<cfelse> 
    <!--- code, if not empty ---> 
</cfif> 

в качестве альтернативы, чтобы сделать ваш код будет выглядеть более элегантный и чистый, использовать третичный оператор (<condition>?<value if true>:<value if false>) в ColdFusion, что позволяет избежать написания длительных условные проверки и одинаково эффективны, как обычный синтаксис тега <cfif><cfelse></cfif>, который мы часто используем.

Итак, для второй части вашего вопроса, когда вам нужно использовать его внутри других полей ввода, вы делаете вышеуказанную проверку внутри самого поля <cfinput>, а не обертываете его внутри длинного условного блока. Вы понимаете, что я имел в виду. Так что, я думаю, что это было бы короче и элегантный способ борьбы с ним:

<cfinput 
    type="text" 
    name="firstName" 
    id="firstName" 
    value="#(reReplace(form.firstName, '[[:space:]]', '', 'ALL') EQ ''?'':'#form.firstName#')#" 
> 

ИЛИ даже поставить более ясно, просто создать свою собственную функцию с именем isEmpty() или что угодно (я надеялся в начале, что ColdFusion должен иметь эту простую функцию, но, к сожалению, нет). Таким образом, логика проверки пустого значения будет включена в вашу функцию, и ваш код будет более читабельным и организованным.

<cfinput 
     type="text" 
     name="firstName" 
     id="firstName" 
     value="#(isEmpty(form.firstName)?'':'#form.firstName#')#" 
    > 

Комментарий на ваш вопрос Джош является хорошим, вы можете использовать <cfparam>, чтобы убедиться, что form.firstName всегда определяется. Ответы James A Mohler и Matt Busche здесь очень похожи, я не знаю, почему у Джеймса нет никаких голосов за его ответ.

Я надеюсь, что это было полезно.

+1

Можете ли вы назвать что-то, что 'ReReplacing [[: space:]]' удаляет, но 'Trim()' does not? Кроме того, вы можете безопасно обрезать переменную в cfset и сохранить ее вокруг, вы бы хотели запустить этот перерыв каждый раз или хранить его в отдельной переменной. Кажется, что это излишний излишний, намного больше, и (даже хотя я люблю регулярное выражение), беспорядок читать, если вы гнездо функции. Кроме того, вы можете использовать '\ s', а не' [: space:] '(который может стать действительно беспорядочным для чтения вложенными в скобки. –

+0

Да для вашего удобства и удовлетворения, если поле содержит несколько символов пробела, то использование только функция trim() не является хорошей идеей. – Anurag

+1

Почему бы и нет? '\ s' и' [: space:] 'удаляет очень маленькое подмножество символов пробелов, а' Trim() 'охватывает все эти и другие. http : //pastebin.com/hNrrATV9. Даже если вы можете изменить, чтобы бросить туда некоторые случайные символы, но с номером, установленным за пределом, как он есть, он будет заполняться случайным пробелом и удалять все –

Смежные вопросы