Регулярное выражение
Требуется помощь в составлении регулярного выражение, которое бы проверяло на соответствие числам формата 11.22 (количество цифр до и после точки не имеет значения) и пустая строка так же подходит
|
написал такую строку, не пашет.
var pattern = /[0-9]|^$|\0/; |
var number = '11.22'; alert(/^\d+\.\d+$/.test(number)); |
не совсем то что я имел ввиду.. в шаблон должны входить цифры, точка, и пустая строка. моя вина, извиняюсь за неточность
|
да и еще одно уточнение, пустая строка подходит, 1234 (строка из просто цифр) подходит, 1234.12 (строка из целой и дробной части) тоже подходит
|
А .12 подходит? То есть без целой части?
|
s="abc1.10\n\nab10.90f 20c"
re=/\d+\.?\d+|^$/gm s.match(re) // [ '1.10', '', '10.90', '20' ] |
Проще наверно будет описать задачу:) есть несколько полей, поля соответствуют сумме покупки. есть кнопка сохранить. при нажатии на сохранить проверяем значения полей, при этом можем сохранить если ничего не ввели в поля, а так же если ввели целое 1234 или дробное 1234.56 числа
|
var number = '11.22'; if(number == '' || (!isNaN(+number) && typeof +number == 'number')) alert('Это число!'); Можно через if. :) |
danik.js, без целой части не подходит, те подходит 0.12 но не .12
terminator-101, а какая смысловая нагрузка в gm ? |
А с экспонентой числа должна пропускать ? Например 1e2 ?
|
var number = '11.22'; alert(/^(\d+(\.\d+)?)?$/.test(number)); |
Ant_Jhon,
глобальный поиск (все вхождения) и многострочный режим |
Цитата:
alert([ typeof +'bla', typeof +{}, typeof +[], typeof +null, typeof +undefined, typeof +true ]); И че те это дало? :D |
вощем решил разбить один большой паттерн на несколько и сделать вложенные if else :) честно говоря походу тут не составить паттерн
|
Ant_Jhon,
Цитата:
|
danik.js, ну я же прописал в условии !isNaN(+number). :)
|
дело осложняется тем что у меня допустим 3 поля, а каждое из них может быть как пустым так и целым так и дробным
|
Цитата:
|
Ant_Jhon, а что не работает разве? http://javascript.ru/forum/misc/5085...tml#post335433
|
Цитата:
А вобще, юзай !isNaN - мне кажется норм ) Правдо оно принимает такие строки как: .12 12. 1e2 Infinity Но не пойух ли? |
буду рад, если скажите как записать 3 отдельных паттерна:) тоесть:
паттерн 1 = числа паттерн 2 = точка паттерн 3 = пустая строчка |
Цитата:
|
терминатор, .12 не подходит
|
Ant_Jhon,
Ну так я же спрашивал, тебе нужно что, чтобы оно целиком не входило или только точка из него не входила? Или чтобы оно целиком входило? Я запутался:) |
Цитата:
|
Цитата:
|
Цитата:
|
/^(?:|\-?\d+(?:\.\d+)?)$/
|
Ant_Jhon,
короче если надо чтоб входило, попробуй вот так s="abc1.10\n\nan.11kjb10.90f 20c" re=/(\d+)?\.?\d+|^$/gm s.match(re) // [ '1.10', '', '.11', '10.90', '20' ] |
щас момент, надо уточнить на счет .12 распарсит ли его сервак в дабл
|
Цитата:
Ну а если тупой юзер или секретутка, то отсутствие целой части - скорее всего ошибка. |
Итак, сори за паузу:) вообще говоря
double tmpParse = Double.parseDouble((String)".1"); log.info("tmpParse = " + tmpParse); вот эта хрень неожиданно(для меня) выдала tmpParse = 0.1, тоесть выражения типа .1 и 1. допустимы :\ |
Цитата:
s="ab<c1.10\n\n>)(*an.11kj5.b10.90f 20c" re=/(\d+)?\.?\d+\.?|^$/gm s.match(re) // [ '1.10', '', '.11', '5.', '10.90', '20' ] |
терминатор, можешь расписать на русском что означает эта конструкция
/(\d+)?\.?\d+\.?|^$/gm ?:) и как я уже спрашивал очень хочется узнать для чего на конце gm? на сколько смог понять из гугла регЭкспы ставятся внутри /../ |
Млять тоже хочу уметь делать такие штуки /(\d+)?\.?\d+\.?|^$/gm
|
Ant_Jhon,
Мне щас некогда, уходить надо, потом. Пока почитай про регекспы на этом сайте, там есть, по-моему. |
Хорошо, спасибо всем за помощь:thanks:
|
Цитата:
Ты уверен что тебе нужно пропускать такой формат? Если да, то регулярка тебе нах не нужна. if (!(input == '' || input == Infinity || isNaN(input))) { } |
Ant_Jhon,
Означает следующее все \d+ означают 1 или более цифровых символов, тут \d -- метасимвол, означающий диапазон 0-9 (эквивалентен [0-9]), он совпадает с любым 1 цифровым символом, а + означает 1 или более вхождений предыдущего символа. Все ? означают 0 или 1 вхождение предыдущего шаблона. а \. означает просто совпадение с точкой (экранирование для того, чтобы отменить интерпретацию точки как метасимвола). Флаг g означает глобальный поиск, значит в строке foofoo /foo/g найдет 2 foo, а /foo/ -- только первое. m -- это флаг многострочного поиска, это значит(конкретно в JS), что символы ^ и $ будут работать со всеми переносами строк, а не только с началом и концом всей строки. Ну ты наверное знаешь, но на всякий случай, | означает or, а ^$ -- совпадение с пустой строкой, само-сабой Вот еще что забыл сказать. Если ты работаешь с файлами, в которых виндовские переносы строк, типа \r\n, ты должен эти строки сначала очистить от всех \r, например вот так s=s.replace(/\r\n/g, "\n") иначе, у тебя будет парсится больше пустых строк чем на самом деле, примерно вот такая параша: s="ab<c1.10a\r\n\r\n>)(*an.11kj5.b10.90f 20c" re=/(\d+)?\.?\d+\.?|^$/gm //s=s.replace(/\r\n/g, "\n") s.match(re) // [ '1.10', '', '', '', '.11', '5.', '10.90', '20' ] |
Часовой пояс GMT +3, время: 15:44. |