Regex (для jQuery) для проверки положительных чисел с двумя десятичными точками - PullRequest
3 голосов
/ 18 декабря 2011

Мне нужно сопоставить поле с регулярным выражением, используя jQuery.В настоящее время я использую:

 onsubmit: function (settings, td) {
            //select integers only
            var intRegex = /[0-9 -()+]+$/;
            var input = $(td).find('input');
            var original = input.val();

            if (original <= 0) {
                Alert('The amount should be bigger than 0');
                return false;
            }
            if (!original.match(intRegex)) {
                Alert('Please enter a valid number');
                return false;
            }
            else {
                return true;
            }
        }

Строка типа "abc" не проходит проверку.Но недопустимые символы, такие как @#$% или "/", проходят проверку, что вызывает ошибку в моем методе.

Я ищу регулярное выражение, которое:

Соответствует: 1.20, 1, 2.00, 3.1

Не совпадает: -1.2, abc, 1/2, $, @#$%

Я просмотрел библиотеку регулярных выражений, но если я вставил (^\d*\.?\d*[0-9]+\d*$)|(^[0-9]+\d*\.\d*$) в свой скрипт, я получил синтаксическую ошибку ...

Ответы [ 3 ]

5 голосов
/ 18 декабря 2011

Вот почему вы получали ложные срабатывания с вашим исходным регулярным выражением:

/[0-9 -()+]+$/
     ^^^

Подчеркнутая мною часть образует диапазон от пробела (U+0020) до левой скобки (U+0028),делая ваше регулярное выражение эквивалентным этому:

/[0-9 !"#$%&'()+]+$/

Если вы хотите сопоставить дефис, вам нужно либо экранировать его обратной косой чертой, либо поместить его в начало или конец набора, например:

/[0-9 ()+-]+$/  

Кроме того, если под "библиотекой регулярных выражений" вы подразумеваете RegExLib.com, я бы не стал доверять никаким регулярным выражениям, которые я там нашел.Тот, который вы опубликовали, является показательным примером:

/(^\d*\.?\d*[0-9]+\d*$)|(^[0-9]+\d*\.\d*$)/

Во-первых, его можно было бы написать гораздо более кратко:

/^(\d*\.?\d+|\d+\.\d*)$/

Во-вторых, он соответствует строкам, таким как 123. и 000000.0000000, который вы, вероятно, не хотите.Если вы действительно хотите сопоставлять только положительные числа, вы должны убедиться, что в строке есть хотя бы одна ненулевая цифра, до или после десятичной точки.Вот один из способов сделать это:

/^(?:[1-9]\d*(?:\.\d\d?)?|0\.[1-9]\d?|0\.0[1-9])$/
5 голосов
/ 18 декабря 2011

Использование:

var intRegex = /^\d+(?:\.\d\d?)?$/;

Это должно работать.

2 голосов
/ 18 декабря 2011
var regxp = /^\d+(\.\d{1,2})?$/;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...