Строки с новой строкой не должны рассматриваться как числа

Я не хочу, чтобы строки с новыми строками рассматривались как числа.

Это следует рассматривать как строку

<cfscript>
  notes = "3
    ";
</cfscript>

Новая строка сохраняется

 <cfoutput>
 <pre>|#notes#|</pre>    

 Number: #isNumeric(notes)# <!--- returns YES --->

 <pre>|#replacelist(notes, chr(10) , "\n") #|</pre>    

 Number: #isNumeric(notes)# <!--- returns YES
 </cfoutput>

Пример cffiddle

введите здесь описание изображения


person James A Mohler    schedule 22.04.2019    source источник
comment
isNumeric() не проверяет, является ли value numeric. Он проверяет, можно ли преобразовать string в number. И если учитывать обрезку значения, то это будет numeric. Хотя я согласен с тем, что если есть возврат каретки, его не следует обрезать. :-/   -  person Shawn    schedule 22.04.2019
comment
Если вам нужен ИСТИННЫЙ isINT(), посмотрите на ответ Алекса здесь: заголовок stackoverflow.com/questions/46124664/   -  person fyroc    schedule 22.04.2019
comment
Чтобы было еще веселее, поставьте впереди символ возврата каретки.   -  person Shawn    schedule 22.04.2019
comment
Где это проблема? Вы всегда можете сделать reFind('^\d+$', ... )   -  person Bernhard Döbler    schedule 23.04.2019
comment
Ваш пример расширяет то, что можно было бы считать хорошим вариантом использования этой функции, восходящей к первым версиям CF (около 1995 г.). Просто помните, что isNumeric() только проверяет, можно ли использовать строку в качестве числа. Типичным вариантом использования является отправка форм, и в этом случае каждая переменная всегда является строкой. Когда form.foo == "2", вы можете передать это значение в любую функцию, которая ожидает число, и она будет работать. Вам никогда не придется явно преобразовывать строку в число. Если вам нужен номер, используйте javaCast()   -  person Redtopia    schedule 23.04.2019
comment
@BernhardDöbler: это решение, которое я в конечном итоге использую. Вы должны написать это как ответ   -  person James A Mohler    schedule 23.04.2019


Ответы (1)


Я всегда не решаюсь написать ответ, когда пишу из головы и у меня нет письменных доказательств того, что я говорю. ColdFusion имеет различные функции для проверки данных. Есть isValid и isInteger и так далее. Я редко использую эти функции, потому что в некоторых случаях они очень свободно проверяют значения. Например, знак доллара будет принят в некоторых случаях, когда должно быть целочисленное значение. Поэтому я использую регулярные выражения, чтобы проверить, является ли значение числовым. reFind( "^\d+$", ... ) позволяет использовать только цифры. Это выражение допускает необязательный минус впереди: reFind( "^-?\d+$", ... )

person Bernhard Döbler    schedule 23.04.2019