Благодарю за функцию. Сам бы так красиво не собрал.
//Отмечу, что данная функция кроме пробела понимает и вертикальную черту.
//Поправил: при применении минуса не принимались пробелы, запятые и вертикаьные черты.
//Ограничил количество пробелов после минуса в количестве не больше одного, иначе минус игнорируется.
//Убрал блок поправки написания одна и две тысячи, поскольку при окончании с 10 до 19 он не работал, ввёл правку прямо в ответ.
var itog_zakaza ='- 1 119'
var itog_hcego = "рубл|ь|я|ей"
function parseNumber(){
var dictionary = [
[ "", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять",
"десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать",
"шестнадцать", "семнадцать", "восемнадцать", "девятнадцать" ],
[ "", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто" ],
[ "", "сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот" ],
[ "тысяч|а|и|", "миллион||а|ов", "миллиард||а|ов", "триллион||а|ов" ]
];
function getNumber(number, limit){
var temp = number.match(/^\d{1,3}([,|\s]\d{3})+/);
if(temp) return temp[0].replace(/[,|\s]/g, "");
temp = Math.abs( parseInt(number) );
if( temp !== temp || temp > limit ) return null;
return String(temp);
};
function setEnding(variants, number){
variants = variants.split("|");
number = number.charAt( number.length - 2 ) === "1" ? null : number.charAt( number.length - 1 );
switch(number){
case "1":
return variants[0] + variants[1];
case "2": case "3": case "4":
return variants[0] + variants[2];
default:
return variants[0] + variants[3];
};
};
function getPostfix(postfix, number){
if( typeof postfix === "string" || postfix instanceof String ){
if( postfix.split("|").for < 3 ) return " " + postfix;
return " " + setEnding(postfix, number);
};
return "";
};
return function(number, postfix){
if(typeof number === "undefined")
return "999" + new Array(dictionary[3].length + 1).join(" 999");
number = String( number );
var minus = false;
number = number.replace(/^\s+/, "").replace(/^-\s{2,}/, "").replace(/^-\s*/, function(){
minus = true;
return "";
}); //Прировнял результат, что бы разделители в числах работали и с минусом
//Подправил выражение, теперь, если между минусом и числом больше одного пробела, минус игнорируется
number = getNumber(number, Number( new Array(dictionary[3].length + 2).join("999") ));
if(!number) return "";
postfix = getPostfix(postfix, number);
if(number === "0") return "ноль" + postfix;
var position = number.length, i = 0, j = 0, result = [];
while(position--){
result.unshift( dictionary[ i++ ][ number.charAt(position) ] );
if(i === 2 && number.charAt(position) === "1" )
result.splice(0, 2, dictionary[0][ number.substring( position, position + 2 ) ]);
if(i === 3 && position !== 0 ){
i = 0;
if( position > 3 && number.substring( position - 3, position ) === "000" ){
j++; continue;
};
result.unshift( setEnding(dictionary[3][j++], number.substring( 0, position )) );
};
};
//Отсда убрал блок исправления написания одна и две тысячи, поскольку при окончании с 10 до 19 он не работал. Исправление ввёл в конечный результат
if(minus) result.unshift("минус");
return result.join(" ").replace(/\s+$/, "").replace(/\s+/g, " ").replace(/один тысяча/, "одна тысяча").replace(/два тысячи/, "две тысячи") + postfix;
};
};
var parseNumber = parseNumber()
document.getElementById("s").innerHTML = parseNumber(itog_zakaza, itog_hcego).charAt(0).toUpperCase() + parseNumber(itog_zakaza, itog_hcego).slice(1) + ".";