Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.06.2011, 11:43
Профессор
Отправить личное сообщение для Telnet Посмотреть профиль Найти все сообщения от Telnet
 
Регистрация: 21.02.2011
Сообщений: 160

Проверка строки на соответствие регулярному выражению
Нужно проверить строку на четкое совпадение регулярному выражению
Строку допустим такая 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("строка НЕ правильная");
        }
Ответить с цитированием
  #2 (permalink)  
Старый 24.06.2011, 12:29
Профессор
Отправить личное сообщение для nikita.mmf Посмотреть профиль Найти все сообщения от nikita.mmf
 
Регистрация: 01.02.2010
Сообщений: 364

var re = /^\d[0-9,]+\d$/;
if (re.test( "227,30,218,9,245,6,256,15,246,26" ) ) {
  alert("Данная строка соответсвует заявленому патерну");
}
Ответить с цитированием
  #3 (permalink)  
Старый 24.06.2011, 12:37
Аватар для SlavaPav
Аспирант
Отправить личное сообщение для SlavaPav Посмотреть профиль Найти все сообщения от SlavaPav
 
Регистрация: 25.02.2010
Сообщений: 57

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" как указатель на первую сохраняющюю группу
Ответить с цитированием
  #4 (permalink)  
Старый 16.07.2011, 23:50
Профессор
Отправить личное сообщение для Telnet Посмотреть профиль Найти все сообщения от Telnet
 
Регистрация: 21.02.2011
Сообщений: 160

Возникла не необходимость не немножко видо изменить это выражение /^\d[0-9,]+\d$/
Так что оно не пропускало просто числа , без единой запятой
допустим
56
или
263
а пропускало только
56,263
или
26,7
Ответить с цитированием
  #5 (permalink)  
Старый 17.07.2011, 00:52
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

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

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
__________________
kobezzza
code monkey
Ответить с цитированием
  #6 (permalink)  
Старый 17.07.2011, 01:43
Профессор
Отправить личное сообщение для with-love-from-siberia Посмотреть профиль Найти все сообщения от with-love-from-siberia
 
Регистрация: 14.12.2009
Сообщений: 155

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

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

Последний раз редактировалось with-love-from-siberia, 17.07.2011 в 01:46.
Ответить с цитированием
  #7 (permalink)  
Старый 17.07.2011, 01:54
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

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


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

Цитата:
Не стоит забывать про простоту сопровождения и излишнюю тягу к преждевременной оптимизации.
Ну за мной есть такой грешок, а вообще нужно смотреть по обстоятельствам)
__________________
kobezzza
code monkey
Ответить с цитированием
  #8 (permalink)  
Старый 17.07.2011, 10:31
Профессор
Отправить личное сообщение для with-love-from-siberia Посмотреть профиль Найти все сообщения от with-love-from-siberia
 
Регистрация: 14.12.2009
Сообщений: 155

Сообщение от kobezzza
Не проходит проверку простого числа
Что в Вашем понимании простое число? Что значит не проходит?

Все работает
Ответить с цитированием
  #9 (permalink)  
Старый 17.07.2011, 15:28
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

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

__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 17.07.2011 в 15:45.
Ответить с цитированием
  #10 (permalink)  
Старый 17.07.2011, 22:33
Профессор
Отправить личное сообщение для Telnet Посмотреть профиль Найти все сообщения от Telnet
 
Регистрация: 21.02.2011
Сообщений: 160

kobezzza спасибо, за функцию, то что нужно.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск