Тоесть если нет необходимости искать эти самы совпадения, то нужно использовать функцию test()?
var pattern = /(\d+)?\.?\d+\.?|^$/gm; if (pattern.test(String)) { Соответствует } else { Не соответствует } |
Да.
|
Ant_Jhon, дык че по isNaN'ке?
|
Цитата:
|
Даник, не понял вопроса.
Терминатор, тоесть эквивалентно ли вот это: if (pattern.test(String)) { Соответствует == Состоит только из символов описанных в pattern } Проще говоря записывая if (pattern.test(String)) я жду что вернется тру в том случае, когда строка String состоит из символов Pattern |
Цитата:
Считаем: Раз: Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
|
Сорь потерял цепочку,
if (!(input == '' || input == Infinity || isNaN(input))) { } так тоже должно работать, только вот .1 будет не число, а это число которое хорошо парсится в дабл. |
Уверен?
alert(isNaN(.1)); |
Erolast,
Так у него строка подается а не число зы вообще да, без разницы |
Цитата:
|
terminator-101, да, с пустой строкой я затупил. Я наоборот, получается, запретил пустую строку.
А с Infinity затупил ты. Потому что Infinity - это число. Но мы его числом считать не хотим, поэтому отметаем. |
Вот правильный вариант. Хотя проверка на пустоту не обязательна. Просто для наглядности, что пустую строку принимаем. И для уменьшения лишних расчетов (тупо из принципа).
if (input == '' || !(input == Infinity || isNaN(input))) { } |
danik.js,
А с такой вот хренью что делать? isNaN("\t")// false |
Все решилось паттерном терминатора, напомню задача была в том чтобы проверить на валидность введенную сумму, подходят числа вида n.n .n n. а так же пустая строка, событие вешается на кнопку сейв. то есть если ничего не ввели, то все равно можем сохранить и потом вернуться к заполнению. проверка на инфинити вообще тут странное лишнее дело, проверка на не число проходить не будет как сказал терминатор тк передается строка
|
Ant_Jhon,
Только имей в виду, что если ты будешь проверять как ты ранее показывал, типа re.test(input), у тебя будут проходить строки типа "foo10bar", если тебе надо то, что строка содержит ТОЛЬКО эти совпадения и ничего более, или ТОЛЬКО ОДНО из этих совпадений, и ничего более, тут надо другое решение искать. |
Цитата:
Цитата:
Пока трабла в этом: Цитата:
|
Цитата:
|
Думаю стоит просто удалять пробелы через input.trim(). При копипасте часто добавляется пробел справа, trim() бы тут помог.
|
Цитата:
|
danik.js,
Но это, вообще то не проблема, можно просто регуляркой лишнее обрезать, да и все. Да, на первый взгляд подходит это решение, вроде. |
Ant_Jhon,
В твоем случае, если с регуляркой, напрашивается что-то вроде такого test=function(input){ var re=/(\d+)?\.?\d+\.?|^$/ var s=input.match(re) if(s){if(s[0]===input){...}} } в s[0] вернется паттерн, например, из foo10bar вернется 10, затем сравнивается с исходной строкой, действие наступает, только если совпало, например, 10 пройдет, а 10а -- нет. Глобальный и многострочный поиски тогда не нужны, никто в инпуте не будет с этим извращаться специально, если юзер нажимает энтер или таб, он выскакивает обычно из поля ввода, аоэтому нам нужно тут только первое введенное, более ничего, иначе все чертовски усложняется. |
Цитата:
Или типа нормализовать число, введенное в свободном формате, типа 10 000? Ну тогда и запятые надо в точки трансформировать, и мож еще чего. |
Ant_Jhon,
Вот, проверил, вроде то что тебе надо, если нет, попробуем скорректировать, если чо. test=function(input){ var re=/(\d+)?\.?\d+\.?|^$/ var s=input.match(re) if(s) console.log(s[0]===input) } test(".1f") // false test("111") // true test("a23") // false test("") // true test("10.") // true test("1a1") // false test(".10") // true Только с пустым пробелом то че делать? Приравнивать его к пустой строке или нет? |
вощем изнан збс работает, тут паттерны не нужны. сори за шумиху:) сдела изнаном и забыл
|
Пробелы можно приравнять к пустой строке, мне кажется
|
Терминатор, попробую протестить щас скорректированный паттерн, тот не работал
|
Цитата:
|
Цитата:
var re=/(\d+)?\.?\d+\.?|^(\s+)?$/ А что насчет запятых вместо точек в качестве разделителей? |
Часовой пояс GMT +3, время: 08:46. |