Регулярное выражение для ограничения длины и структуры валюты

Я хочу ограничить использование пользователем недопустимой суммы в тексте ввода шрифтов. Максимальная длина целых чисел и чисел фракций известна во время выполнения. Я пытаюсь добиться этого, используя регулярное выражение JavaScript.

    var pattern =/^\d{0,3}?[\.]?\d{1,3}$/;
    if (pattern.test(amount)) {
        return true;
    }else {
        console.log('rgx Failed');
        return false;
    }

В этом примере я рассматриваю 3 как максимальное целое число и длину фракции.
Целочисленная часть может иметь длину от 0 до 3, дробная часть должна быть как минимум одна цифра и не более 3. Но вышеупомянутый JavaScript не работает, он позволяет 7 цифр в целочисленной части.

Я вызываю этот скрипт с enterText onKeyDown, так что я могу проверить, чтобы каждое нажатие клавиши и ограничивало ввод только действительной суммы.

Действительная сумма: 123.123, 12.1, 1.12, .123, 1.3, .1234 и т. Д. Недопустимая сумма: 123., 1234 и т. Д.

0
Вы забыли конечный разделитель в регулярном выражении, вызывая синтаксическую ошибку.
добавлено автор John Dvorak, источник
Я повторяю свое требование: пользователь может ввести только целочисленную часть, в этом случае десятичное и ноль после десятичного числа должно автоматически появляться. Пользователь может также вводить десятичную часть, путем ввода десятичной дроби, а затем десятичных цифр (например, .34), и в этом случае 0.34 должно появляться автоматически
добавлено автор Sandeep Goud, источник

4 ответы

Быстрое решение:

/^\d{0,3}\.\d{1,3}$/

Чтобы соответствовать обновленным требованиям:

pattern.replace(/^(\d{0,3})\.?(\d{0,3})$/, function(m, g1,g2) {
    return (g1 || 0) + '.' + (g2 || 0);
})

будет работать до тех пор, пока вход ограничен 6 цифрами и необязательным десятичным знаком

2
добавлено
В каком случае, как пользователь вводит 1.3?
добавлено автор Dve, источник
@Sandeep в порядке, поэтому вы хотите сделать больше, чем просто соответствовать допустимому значению. Вы также хотите очистить вход. Ответ обновлен.
добавлено автор Dve, источник
Вы просто пытаетесь форматировать валюту? Если да, почему бы не использовать josscrowcroft.github.com/accounting.js
добавлено автор Dve, источник
Я думаю, это не удастся .1234
добавлено автор Piyuesh, источник
Это позволяет мне ввести 1234567 в целочисленную часть, а затем regx не удалось.
добавлено автор Sandeep Goud, источник
Да, я хочу ограничить и форматировать валюту. Я попробую.
добавлено автор Sandeep Goud, источник
Пользователь может ввести 1,3 или 1 (.0 должно быть автоматически добавлено) или .3 (0 должно быть добавлено до десятичной точки автоматически).
добавлено автор Sandeep Goud, источник
Я повторяю свое требование: пользователь может ввести только целочисленную часть, в этом случае десятичное и ноль после десятичного числа должно автоматически появляться. Пользователь может также вводить десятичную часть, путем ввода десятичной дроби, а затем десятичных цифр (например, .34), и в этом случае 0.34 должно появляться автоматически
добавлено автор Sandeep Goud, источник
С помощью этого регулярного выражения я могу ввести только одно число в целочисленной части.
добавлено автор Sandeep Goud, источник

Как насчет:

<Код>/^ (\ d {1,3} \ \ d {1,3}.) | (. \ \ D {1,3}) | (\ d {1,3}) $/

Это не чисто, но это работает.

0
добавлено
После использования вышеупомянутого regx он принимает любое количество цифр в целочисленной и дробной части.
добавлено автор Sandeep Goud, источник

попробуйте это .... (^ \ d {1,3} ([.] \ d {1,3})?) $ | (^ \ d {0,3} $)

лучше бы использовать lookahead? = или отрицательный взгляд?!

благодаря

0
добавлено
Да, вы были правы. Я добавил $ above try сейчас.
добавлено автор Piyuesh, источник
Я просто попробовал regexpal.com . Он работает нормально.
добавлено автор Piyuesh, источник
Я попробовал ваше решение. Он отлично работает на regexpal.com . В моем приложении он принимает 4 цифры в целочисленной части. А также после трех цифр, если десятичная дата указана, никакая десятичная часть не может быть введена. Я использую Google Chrome
добавлено автор Sandeep Goud, источник
но я не нахожу никакой разницы.
добавлено автор Sandeep Goud, источник
После использования вышеупомянутого regx он принимает любое количество цифр в целочисленной и дробной части.
добавлено автор Sandeep Goud, источник

Я использовал компонентных элементов extensionfaces extensions, который удовлетворяет всем моим требованиям и условиям.

maxValue=9999.999"/>

Inputnumber принимает, 4digits в целой части и 3digits в десятичной части. Формирование и добавление нулей обрабатывается самим компонентом.

0
добавлено
JavaScript Jobs — чат
JavaScript Jobs — чат
8 336 участник(ов)

JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

JavaScript.ru
JavaScript.ru
7 932 участник(ов)

Сообщество сайта JavaScript.ru в Slack.

pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
3 269 участник(ов)

Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
2 484 участник(ов)

Чат для новичков

javascript_ru
javascript_ru
915 участник(ов)

Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

jsChat
jsChat
603 участник(ов)

Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

JavaScript for Zombies Chat
JavaScript for Zombies Chat
492 участник(ов)

Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

All That JS
All That JS
417 участник(ов)

JS на русском