Javascript.RU

PHP-функция: strnatcmp

Зависит от

Javascript:

function strnatcmp ( f_string1, f_string2, f_version ) {	// String comparisons using a "natural order" algorithm
	// 
	// +   original by: Martijn Wieringa
	// + namespaced by: Michael White (http://crestidg.com)

	if(f_version == undefined) {
		f_version = false;
	}

	var __strnatcmp_split = function( f_string ) {
			var result = new Array();
			var buffer = '';
			var chr = '';

			var text = true;

			for(var i = 0; i < f_string.length; i++){
				chr = f_string.substring(i, i + 1);

				if(chr.match(/[0-9]/)){
					if(text){
						if(buffer.length > 0){
							result[result.length] = buffer;
							buffer = '';
						}

						text = false;
					}
					buffer += chr;
				} else if((text == false) && (chr == '.') && (i < (f_string.length - 1)) && (f_string.substring(i + 1, i + 2).match(/[0-9]/))) {
					result[result.length] = buffer;
					buffer = '';
				} else {
					if(text == false) {
						if(buffer.length > 0) {
							result[result.length] = parseInt(buffer);
							buffer = '';
						}
						text = true;
					}
					buffer += chr;
				}
			}

			if(buffer.length > 0) {
				if(text) {
					result[result.length] = buffer;
				} else {
					result[result.length] = parseInt(buffer);
				}
			}

			return result;
		};

	var array1 = __strnatcmp_split(f_string1);
	var array2 = __strnatcmp_split(f_string2);

	var len = array1.length;
	var text = true;

	var result = -1;
	var r = 0;

	if(len > array2.length) {
		len = array2.length;
		result = 1;
	}

	for(i = 0; i < len; i++) {
		if(isNaN(array1[i])) {
			if(isNaN(array2[i])){
				text = true;

				if((r = this.strcmp(array1[i], array2[i])) != 0) {
					return r;
				}
			}
			else if(text){
				return 1;
			} else {
				return -1;
			}
		} else if(isNaN(array2[i])){
			if(text) {
				return -1;
			} else{
				return 1;
			}
		}else  {
			if(text || f_version){
				if((r = (array1[i] - array2[i])) != 0){
					return r;
				}
			} else {
				if((r = this.strcmp(array1[i].toString(), array2[i].toString())) != 0) {
					return r;
				}
			}

			text = false;
		}
	}

	return result;
}

Примеры:

strnatcmp('Price 12.9', 'Price 12.15');
1

strnatcmp('Version 12.9', 'Version 12.15', true);
-6

strnatcmp('Version 12.9', 'Version 12.15', false);
1


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
3 + 14 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние комментарии
Последние темы на форуме
Forum