Показать сообщение отдельно
  #21 (permalink)  
Старый 24.04.2012, 19:59
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от trikadin Посмотреть сообщение
melky, надоест) А твои варианты?)
есть тут одна идея

псевдокод :
var значение = /*2px, 3345PX, 62in, 3%, 5* .. значение, короче/;
if( верное(значение) ){
    результат = рега.exec(значение); 
}

function верное( значение ){
    // проверить посредством HTML (элемент)
}

код :

PS затестите, пожалуйста, в виндовых браузерах. у меня под рукой только FF и CH
function parseValue(){

    var 
        dummy = document.createElement('b'),
        reg = /(\d+)(%|\w*)/;

    parseValue = function(value){
        if(parseValue.isNormal(value)){
            reg.exec(value);
            return { value: RegExp.$1, dimension: RegExp.$2 };
        }
    };

    parseValue.isNormal = function(value){
        if(value === "0") {
            return true; // "чистый" нуль все вертят, как хотят.
        } else {
            // IE FIX : он метает ошибку, если значение неверное.
            try {
                dummy.style.fontSize = value;  
            } catch(e) {
                return false; // если неверное значение, IE породит ошибку (итог: значение неверное)
            }
            return dummy.style.fontSize === value;
        }
    };

    return parseValue.apply(this, arguments);
}

var a="1px 2in 4% 0 0px 0% 65334em СТОЛpx ы%".split(' ');
var i = 0;
var parsed;
while(i in a){  
    parsed = parseValue(a[i]);
    a[i] = a[i++]+" => "+ (parsed?parsed.value+":"+parsed.dimension:'ничего');
}
alert(a.join('\n'));

Последний раз редактировалось melky, 24.04.2012 в 20:36. Причина: допилил нормальную проверку.
Ответить с цитированием