Форум 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)
-   -   Валидация строки на одинаковые символы (http://www.flasher.ru/forum/showthread.php?t=174083)

australian incognito 17.01.2012 18:15

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

Т.е. разрешается ввод типа:
Код AS1/AS2:

"привет всем!"

Код AS1/AS2:

"как я встретил вашу маму"

но не разрешен ввод типа:
Код AS1/AS2:

" "

Код AS1/AS2:

"         "


mooncar 17.01.2012 18:51

А такой валидный?
Код:

"как я                            "
или
Код:

"                      маму"
или
Код:

"как                маму"

australian incognito 17.01.2012 19:09

Цитата:

Сообщение от mooncar (Сообщение 1057523)
А такой валидный?

В идеале - не более 2-х пробелов подряд. Как черновой вариант - сойдут и вышеописанные варианты.

Zebestov 17.01.2012 19:11

Код AS3:

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

Цитата:

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

Меняем первый пробел (^\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:
Код AS1/AS2:

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

Код AS1/AS2:

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 секунд
Цитата:

Сообщение от silin (Сообщение 1057715)
Код AS1/AS2:

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 );


Спасибо, очень изящно - чувствуется рука мастера ;)


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

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