Просмотр полной версии : Разрешить только 1 пробел
deman455
30.01.2010, 22:24
Как такое сделать ?
Добавлено через 30 секунд
Что бы в инпут поле между словами можно было только один пробел
tf.onChanged = function()
{
this.text = this.text.split(" ").join(" ");
}
silin, а если сразу четыре пробела влепить? :) Больше двух, одним словом.
в уже написанном тексте отыскать все двойные пробелы и заменить их на одинарные
повторять пока перестанут находится двойные пробелы
или отслеживать последние два символа в поле инпут, если оба пробелы то заменять на один
ага, про копипаст не подумал
while(this.text.indexOf(" ")>-1) this.text = this.text.split(" ").join(" ");
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:
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("") + "|");
Или как-нибудь так...
Ну тогда и мой вариант:
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);
}
};
ну канеш, думать о производительности надо всегда :)
но здесь-то инпут поле, разовая операция: в чем нужда оптимизировать? в чем выигрыш, кроме неочевидности кода?
Ну тогда и мой вариант:
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);
}
};
Ну, а если копипаст? :)
ну канеш, думать о производительности надо всегда :)
но здесь-то инпут поле, разовая операция: в чем нужда оптимизировать? в чем выигрыш, кроме неочевидности кода?
Ну, код не обязан быть неочевидным, его можно потом аккуратно упаковать в функцию типа StringUtils.removeWhite( input : String ) : String и использовать не только для текстового поля :)
Просто мне тут недавно попался (в нашей же конторе) один "мастер яваскрипта и копипаста международного класса", и этот милый человек скопировал из какого-то индейского туториала функцию проверки строки на возможность конвертации в число... как бы функция не всегда работала, и вообще в туториале была только ради примера... но, как обычно, она была применена для валидации суммы в $$ в форме покупки чего-то на нашем же сайте :-) слава богу у нас никто ничего никогда купить не пытался :-)
Так я это к тому, что лучше написать так, чтобы ультимативно на все случаи жизни, чем потом циллиндрический гроб заказывать :-)
Ну, а если копипаст?
Да, тут уже не сработает, вы правы.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.