Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите с регуляркой (https://javascript.ru/forum/misc/7923-pomogite-s-regulyarkojj.html)

tazododu 26.02.2010 13:24

Помогите с регуляркой
 
никак не получается сделать регулярку со следующими условиями:
-оставлять только числа, запятую и точку
-если точка или запятая уже была, следующую удалять

наваял это
var reg = /[^0-9\.\,]/g;
var result = str.replace(reg, "");

а вот как оставлять только одну уточку не знаю(

Kolyaj 26.02.2010 13:43

Просмотра назад в JS нет, поэтому проще наверно callback-функцией
var str = 'adf 23.12,45 kjk';
var dotFound = false;
var result = str.replace(/[^0-9]/g, function(ch) {
    if ((ch == '.' || ch == ',') && !dotFound) {
        dotFound = true;
        return ch;
    }
    return '';
});
alert(result);

tazododu 26.02.2010 18:13

не вышло, сейчас попробуй найти как определять последний введенный символ

Kolyaj 26.02.2010 18:19

Цитата:

Сообщение от tazododu
не вышло

Что не вышло?

Цитата:

Сообщение от tazododu
сейчас попробуй найти как определять последний введенный символ

Че?

PeaceCoder 26.02.2010 18:53

alert('adf 23.12,45 kjk .dll. ,lll,'.replace(/[^0-9,.]+/g,'').replace(/(\.[^.]*)?\./g,'$1').replace(/(,[^,]*)?,/g,'$1'));

e1f 26.02.2010 19:17

alert('adf 23.12,45 kjk .dll. ,lll,'.replace(/[^0-9,.]+/g,'').replace(/(\.[^.]*)\.|(,[^,]*),/g,'$1$2'))


и?

PeaceCoder 26.02.2010 19:43

Цитата:

Сообщение от e1f
и?

переправил.

e1f 26.02.2010 20:05

alert('adf 23.12,45 kjk .dll. ,lll,v...,,'.replace(/[^0-9,.]+/g,'').replace(/(\.[^.]*)?\./g,'$1').replace(/(,[^,]*)?,/g,'$1'))

Kolyaj 26.02.2010 20:23

callback всё-таки лучше, чем три replace.

e1f 26.02.2010 20:30

alert("aaa 2.3.1..2,4,5.,, k,j,k .dl4l. ,l,,,4,ll,v.,..,,".replace(/[^0-9,.]+/g,'').
    split('').reverse().join('').
    replace(/(?:\.|,)(?=.*(?:\.|\,))/g, '').
    split('').reverse().join(''))


Да, callback все же лучше :)
Кошмар, до чего доводит желание пользоваться регулярками :)


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