PDA

Просмотр полной версии : Валидация строки на одинаковые символы


australian incognito
17.01.2012, 18:15
Доброго дня всем.
Не могу придумать как реализовать следующее: допустим есть некое текстовое поле (input), в которое вводятся символы (назовем его myText_txt). Я хочу сделать проверку на то, чтобы введенные символы не состояли из одних только пробелов, но при этом один или несколько пробелов разрешается, если есть другие символы.

Т.е. разрешается ввод типа:
"привет всем!"
"как я встретил вашу маму"

но не разрешен ввод типа:
" "
" "

mooncar
17.01.2012, 18:51
А такой валидный?
"как я "
или
" маму"
или
"как маму"

australian incognito
17.01.2012, 19:09
А такой валидный?
В идеале - не более 2-х пробелов подряд. Как черновой вариант - сойдут и вышеописанные варианты.

Zebestov
17.01.2012, 19:11
str.replace(/^\s|\s{2,}?|\s$/g, "");
if (str == "")
{
trace("Ненене, Дэвид Блейн!!! Мы тебе что, ...");
}


Хм... что-то я не доглядел, что здесь AS 1/2 :o

Тогда в цикле while меняй два пробела на один, пока менять больше будет нечего =)

FlashRus
17.01.2012, 19:31
str.replace(/^\s|\s{2,}?|\s$/g, "")

сколько читал, не могу понять как работают выражения такого вида.

Zebestov
17.01.2012, 19:41
сколько читал, не могу понять как работают выражения такого вида.

Меняем первый пробел (^\s) ИЛИ (|) два и более пробела (\s{2,}?) ИЛИ (|) последний пробел (\s$) на пустое место ("")

FlashRus
17.01.2012, 19:43
А можно ещё глубже?

^\s

и ещё, как у них обстоят дела с производительностью? Еффективней написать своё или использовать это?

Zebestov
17.01.2012, 19:46
^\s
\s — пробел. один. обязательно.
^ — стоит в начале шаблона, значит имеется в виду "символ следом должен быть в начале строки"

australian incognito
18.01.2012, 16:53
Реализовал следующим образом на АС2:

var str:String = " ";
var eLength = str.length;
var i:Number = 0;
var k:Number = 0;
while (i < eLength)
{
if (str.charAt(i) == " " || str.charAt(i) == " ")
{
k++;
}else{
k--;
}
i++;
}
if(k>0){
trace("NO!")
}
В итоге, если пробелов больше, чем любых других букв - значит валидация не пройдена. Может не самый изящный вариант, но для моих целей вполне сойдет. Если кто-то сможет довести до идеала - буду рад посмотреть.

silin
18.01.2012, 17:47
var str:String = " qwe rty ";
// проверка на все пробелы
var isBlank:Boolean = str.split(" ").length == str.length + 1;
trace( "isBlank : " + isBlank );
// проверка на три и более пробела подряд
var hasTripleBlanks:Boolean = str.indexOf(" ") > -1;
trace( "hasTripleBlanks : " + hasTripleBlanks );

australian incognito
18.01.2012, 20:01
Добавлено через 58 секунд
var str:String = " qwe rty ";
// проверка на все пробелы
var isBlank:Boolean = str.split(" ").length == str.length + 1;
trace( "isBlank : " + isBlank );
// проверка на три и более пробела подряд
var hasTripleBlanks:Boolean = str.indexOf(" ") > -1;
trace( "hasTripleBlanks : " + hasTripleBlanks );
Спасибо, очень изящно - чувствуется рука мастера ;)