Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Разрешить только 1 пробел (http://www.flasher.ru/forum/showthread.php?t=135733)

deman455 30.01.2010 22:24

Разрешить только 1 пробел
 
Как такое сделать ?

Добавлено через 30 секунд
Что бы в инпут поле между словами можно было только один пробел

silin 30.01.2010 22:41

Код AS1/AS2:

tf.onChanged = function()
{
        this.text = this.text.split("  ").join(" ");
}


udaaff 30.01.2010 22:48

silin, а если сразу четыре пробела влепить? :) Больше двух, одним словом.

fessor 30.01.2010 22:56

в уже написанном тексте отыскать все двойные пробелы и заменить их на одинарные
повторять пока перестанут находится двойные пробелы

или отслеживать последние два символа в поле инпут, если оба пробелы то заменять на один

silin 30.01.2010 22:58

ага, про копипаст не подумал
Код AS1/AS2:

while(this.text.indexOf("  ")>-1) this.text = this.text.split("  ").join(" ");


wvxvw 30.01.2010 23:42

Код AS1/AS2:

var s:String = "    a  b       c d  e  ";
var i:Number = 0;
var j:Number = s.length;
var c:String;
var buffer:Array/*String*/ = [];
var state:Boolean = true;
while (i < j)
{
        c = s.charAt(i);
        if (c == " ")
        {
                if (state)
                {
                        state = false;
                        buffer.push(c);
                }
        }
        else
        {
                state = true;
                buffer.push(c);
        }
        i++;
}
trace("|" + buffer.join("") + "|");

Вообще-то, если производительность имеет значение, то, пожалуй, что так было бы лучше, но поди знай, что там будет медленнее и что быстрее + от количества последовательных пробелов зависит и т.д. Но вцелом, создавать и удалять временные массивы - не самый хороший подход...

EDIT:
Код AS1/AS2:

var s:String = "    a  b       c d  e   ";
var i:Number = 0;
var j:Number = s.length;
var c:String;
var buffer:Array/*String*/ = [];
var state:Boolean = true;
var start:Number = 0;
 
while (i < j)
{
        c = s.charAt(i);
        if (c == " " && start != i - 1)
        {
                buffer.push(s.substring(start, i));
                start = i;
        }
        else if (c == " ") start++;
        i++;
}
if (s.charAt(s.length - 1) == " ") buffer.push(" ");
trace("|" + buffer.join("") + "|");

Или как-нибудь так...

samana 30.01.2010 23:51

Ну тогда и мой вариант:
Код AS1/AS2:

text.onChanged = function() {
        var a = this.text;
 
        if (a.charAt(this.length - 2) == " " && a.charAt(this.length - 1) == " ") {
                this.text = a.slice(0, a.length - 1);
        }
 
};


silin 30.01.2010 23:57

ну канеш, думать о производительности надо всегда :)
но здесь-то инпут поле, разовая операция: в чем нужда оптимизировать? в чем выигрыш, кроме неочевидности кода?

wvxvw 31.01.2010 00:19

Цитата:

Сообщение от samana (Сообщение 883061)
Ну тогда и мой вариант:
Код AS1/AS2:

text.onChanged = function() {
        var a = this.text;
 
        if (a.charAt(this.length - 2) == " " && a.charAt(this.length - 1) == " ") {
                this.text = a.slice(0, a.length - 1);
        }
 
};


Ну, а если копипаст? :)

Цитата:

Сообщение от silin (Сообщение 883063)
ну канеш, думать о производительности надо всегда :)
но здесь-то инпут поле, разовая операция: в чем нужда оптимизировать? в чем выигрыш, кроме неочевидности кода?

Ну, код не обязан быть неочевидным, его можно потом аккуратно упаковать в функцию типа StringUtils.removeWhite( input : String ) : String и использовать не только для текстового поля :)
Просто мне тут недавно попался (в нашей же конторе) один "мастер яваскрипта и копипаста международного класса", и этот милый человек скопировал из какого-то индейского туториала функцию проверки строки на возможность конвертации в число... как бы функция не всегда работала, и вообще в туториале была только ради примера... но, как обычно, она была применена для валидации суммы в $$ в форме покупки чего-то на нашем же сайте :-) слава богу у нас никто ничего никогда купить не пытался :-)
Так я это к тому, что лучше написать так, чтобы ультимативно на все случаи жизни, чем потом циллиндрический гроб заказывать :-)

samana 31.01.2010 00:39

Цитата:

Ну, а если копипаст?
Да, тут уже не сработает, вы правы.


Часовой пояс GMT +4, время: 04:29.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.