2014-01-26 3 views
-1

У меня есть поле, которое может иметь:Какое регулярное выражение для jQuery удовлетворяет этим условиям?

  • до потенциально 2 знаков после запятой помещает
  • до потенциально 6 без знаков после запятой
  • не более 8 цифр в целом (макс 2 десятичных плюс макс 6 не-десятичные)
  • положительное число

так правильные входы были бы в диапазоне от 0,01 до 999999.99, и конечные нули не является проблемой, так 4.00 так же штраф s 4.

+3

FWIW, регулярные выражения не имеют ничего общего с JQuery. что ты уже испробовал? –

+0

SO не является фабрикой кода, где вы можете просто заказать код бесплатно. Вам нужно показать, что вы действительно потратили некоторое время на то, чтобы разобраться в себе, опубликовав хотя бы рудиментарную попытку решить проблему. – t0mppa

+0

Да, я не очень сильно это сказал, я просто дал понять, что искал решение Javascript :) До сих пор я пытался попробовать это через Django через API, затем используя встроенную проверку.Это был полный сбой, а также полагался на использование вызова API только для проверки поля ввода, которое было глупо с моей стороны. Я надеялся, что Реджикс станет моим спасением. но я regex eejit :) @ t0mppa Мои извинения. Я видел десятки других вопросов, предоставляющих решения Regex, не предлагая существующих попыток, поэтому я решил, что смогу последовать этому примеру. Я буду более осторожным в будущем :) –

ответ

0

Попробуйте эту модель:

^[0-9]{1,6}(?:\.[0-9]{1,2}0*)?$ 

Если вы хотите, чтобы начальные и конечные пробелы, добавить \s* в начале и в конце картины, сразу после ^ и прямо перед $.

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

+0

Это позволяет использовать нулевые ноты. –

+0

@FelixKling Почему это не должно быть? 0.01 - вполне допустимое число. –

+0

Да, но я имею в виду, например, 00042. Я не говорю, что это не может быть учтено, просто можно было бы указать (так как OP явно сказал * «конечные нули - это не проблема» *, но ничего о ведущих нулях). –

0

Вы могли бы попробовать что-то вроде этого:

  • до потенциально 2 десятичных мест: (\.\d{1,2})? - Это будет соответствовать десятичной точке, за которой следует минимум 1 и максимум 2 цифры. Это необязательно.
  • До потенциально 6 знаков без знака после запятой: \d{1,6} - Это будет соответствовать минимум 1 цифре и максимум 6 цифрам.
  • Всего не более 8 цифр (максимум 2 десятичных знака плюс максимум 6 не десятичных знаков): Вы можете расчесывать два выше, чтобы получить следующее: \d{1,6}(\.\d{1,2})?.
  • Будьте положительным: измените так: ^\d{1,6}(\.\d{1,2})?$. Это должно гарантировать, что любое число, которое вы передаете ему, не начинается с отрицательного знака. Антенны ^ и $ инструктируют механизм регулярных выражений начинать согласование в начале строки и завершать сопоставление в конце. Это должно позволить вам быть уверенным, что строка, которую вы сопоставляете, действительно является числом.

При этом вы должны действительно выполнять проверки числового диапазона, используя соответствующие математические операции, которые предоставляет ваш язык (в данном случае JavaScript). Небольшое изменение в числовом диапазоне, которое вы после этого, скорее всего, приведет к значительным изменениям в вашем регулярном выражении.

+0

Я пытался искать это, но регулярное выражение всегда казалось, что оно появилось. Возможно, мой Google-foo довольно плох. Попытаюсь исследовать больше вариантов, спасибо :) –

0

Это может подтвердить это

# /^(?=.*[1-9].*$)(?=[.]?(?:\d[.]?){1,8}$)(?=\d{0,6}(?:[.]\d{0,2})?$)/ 

^ 
(?=      # must be a positive number 
     .* [1-9] .* $ 
) 
(?= 
     [.]? 
     (?:     # 1 to 8 digits 
      \d 
      [.]? 
    ){1,8} 
     $ 
) 
(?= 
     \d{0,6}    # 0 to 6 non-decimal places 
     (?: 
      [.]   # 0 to 2 decimal places 
      \d{0,2} 
    )? 
     $ 
) 
Смежные вопросы