Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проверка строки на соответствие регулярному выражению (https://javascript.ru/forum/misc/18276-proverka-stroki-na-sootvetstvie-regulyarnomu-vyrazheniyu.html)

Telnet 24.06.2011 11:43

Проверка строки на соответствие регулярному выражению
 
Нужно проверить строку на четкое совпадение регулярному выражению
Строку допустим такая 227,30,218,9,245,6,256,15,246,26
Обязательное условие что б в конце без пробела и без запятой
Регулярное выражение сам написал вроде все правильно находит
/((\d)+,)+(\d)+/, но вот как это все применить в javascript?

if ( /((\d)+,)+(\d)+/.test('227,30,218,9,245,6,256,15,246,26') ) {
	document.write("строка правильная");
	}else{
        document.write("строка НЕ правильная");
        }

nikita.mmf 24.06.2011 12:29

var re = /^\d[0-9,]+\d$/;
if (re.test( "227,30,218,9,245,6,256,15,246,26" ) ) {
  alert("Данная строка соответсвует заявленому патерну");
}

SlavaPav 24.06.2011 12:37

var res = /(\d+,)+\d+/.test('227,30,218,9,245,6,256,15,246,26'); 
var res = /(\d+,)+\d+/.exec('227,30,218,9,245,6,256,15,246,26'); // 
var res = '227,30,218,9,245,6,256,15,246,26'.search(/(\d+,)+\d+/); // возвращает индекс начала совпадения или -1
var res = '227,30,218,9,245,6,256,15,246,26'.match(/(\d+,)+\d+/); // возвращает массив с совпадениями
var res = '227,30,218,9,245,6,256,15,246,26'.replace(/(\d+,)+\d+/, 'bubble'); // заменяет регулярку на текст,
// можно использовать "$1" как указатель на первую сохраняющюю группу

Telnet 16.07.2011 23:50

Возникла не необходимость не немножко видо изменить это выражение /^\d[0-9,]+\d$/
Так что оно не пропускало просто числа , без единой запятой
допустим
56
или
263
а пропускало только
56,263
или
26,7

kobezzza 17.07.2011 00:52

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

function test(str){
    if (!str) { return false; }
    str = str.split(",");
    if (!str[1]) { return false; }    

    for (var i = str.length; i--;) {
        if (isNaN(str[i]) || !str[i]) { return false; }
    }

    return true;
}

test("121"); // false
test("121,"); // false
test(",121"); // false
test("121,4"); // true

with-love-from-siberia 17.07.2011 01:43

Код:

/^(\d+,)*(\d+)$/
Обратите внимание на "звездочку" вместо "плюсика".

Цитата:

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

Не стоит забывать про простоту сопровождения и излишнюю тягу к преждевременной оптимизации.

kobezzza 17.07.2011 01:54

/^(\d+,)*(\d+)$/


Не проходит проверку простого числа

Цитата:

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

with-love-from-siberia 17.07.2011 10:31

Цитата:

Сообщение от kobezzza
Не проходит проверку простого числа

Что в Вашем понимании простое число? Что значит не проходит?

Все работает

kobezzza 17.07.2011 15:28

Ну в условие было сказано, что одно число, типо: 56 не должно проходить, а только несколько чисел: 65,2,11,7 и т.д.


Telnet 17.07.2011 22:33

kobezzza спасибо, за функцию, то что нужно.


Часовой пояс GMT +3, время: 10:14.