Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> RegExp, 2 слова по 15 символов 
:(
    Опции темы
FRAGNATIC
Дата 10.5.2006, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


Профиль
Группа: Участник
Сообщений: 901
Регистрация: 17.10.2004
Где: ICQ

Репутация: нет
Всего: 11



Вообшем уже не первый час мучаюсь с одной проблемой.
Нужно чтобы в поле можно было ввести не больше двух слов (можно и одно)
при этом каждое слово не должно привышать 15 символов. и разелитель может быть только один пробел
Вот кое что вышло
reg = /^[a-zA-Z0-9_]{0,15}\s[a-zA-Z0-9_]{0,15}$/;
но если проверять эту маску на onkeypress то разумеется при вводе первого символа она не совпадает и проверка возвращает лож.
а надо чтобы ввёл 15 символом потом можешь только один пробел и за ним уже только ещё 15 символов можешь вводить.
пробовал ещё так

Код

function checkEnWords(el)
{
    value = el.value;

        numwords = value.split(" ");
    if(numwords.length>2){
          return false;
        }
        
if(numwords.length==2){
           if (numwords[1].length >= 15) {
               return false;
           }
         } else {
           if (numwords[0].length >= 16) {
              return false;
           }
         }
        // reg = /^[a-zA-Z0-9_]{0,4}\s[a-zA-Z0-9_]{0,4}$/;
    len = el.value.length;
    reg = /^[a-z A-Z0-9_]*$/;
    isValid = reg.test(value);
    while(!isValid && len > 1) {
        value = value.substr(0, len - 1);
        el.value = value;
        isValid = reg.test(value);
        len = value.length;
    }
    if (!isValid && len == 1) {
        el.value = "";
    }
    if (len >= 0 && len <= 31 && isValid) {
        return true;
    } else {
        return false;
    }     
}

но в таком ввиде можно в первое слово ввести 16 символом, а потом уже низя пробел или же 15 символом и пробел, да и вообще он глюковатый оч)
  

Это сообщение отредактировал(а) FRAGNATIC - 11.5.2006, 00:01
PM MAIL   Вверх
FRAGNATIC
Дата 11.5.2006, 01:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


Профиль
Группа: Участник
Сообщений: 901
Регистрация: 17.10.2004
Где: ICQ

Репутация: нет
Всего: 11



Код

function checkEnWords(el)
{
    value = el.value;
    len = el.value.length;
        reg = /^[a-z A-Z0-9_]{0,4}$/;
        ch = value.charCodeAt(value.length-1)
        if(ch==32 || value.indexOf(" ")>-1){
          reg = /^[a-zA-Z0-9_]{0,4}\s[a-zA-Z0-9_]{0,4}$/;
        }
    isValid = reg.test(value);
    while(!isValid && len > 1) {
        value = value.substr(0, len - 1);
        el.value = value;
        isValid = reg.test(value);
        len = value.length;
    }
    if (!isValid && len == 1) {
        el.value = "";
    }
    if (len >= 0 && len <= 31 && isValid) {
        return true;
    } else {
        return false;
    }
}

ВРоде не плохо так пашет ;) 
Но всё ровно буду рад если кто-то ещё и другие решения подскажет) 
PM MAIL   Вверх
12345c
Дата 11.5.2006, 02:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Ну вот, чистая математика, код для отладки и наблюдений:
Код
<input  onkeyup=g('s2').innerHTML=chk(this.value)><br>
<span id=s1>--</span><br>
<span id=s2>**</span><br>
<script>g=function(I){return document.getElementById(I);}
chk=function(t){
a=t.match(/\w{1,15}/g);    g('s1').innerHTML=a;
b=t.match(/ /g);if(b==null)b=[''];
if(a==null || b.join('').length>1 || a.join('').length>15&&b.join('').length==0)return false;
return [a.length<=2 && t.length==a.join('').length+b.join('').length, a.join('').length, b.join('').length];}
</script>

Код для работы:
Код
<input  onkeyup="g('s3').innerHTML=chk2(this.value)"><br>
<span id=s3></span>
<script>g=function(I){return document.getElementById(I);}
chk2=function(t){a=t.match(/\w{1,15}/g);
b=t.match(/ /g);if(b==null)b=[''];
if(a==null || b.join('').length>1 || a.join('').length>15&&b.join('').length==0)return false;
return a.length<=2 && t.length==a.join('').length+b.join('').length;}
</script>
 
Или ещё проще (заодно позволит пробел впереди поставить, чтобы приписать второе слово, и русские буквы учесть):
Код
<input onkeyup="a=(t=this.value).match(/[\wа-яА-ЯёЁ]{1,15}/g);document.getElementById('s2').innerHTML=a!=null && (a.length==2 && t==a.join(' ')||a.length==1 &&  t.replace(/ /,'')==a[0])"><br>
<span id=s2></span><br>
 А вообще, задача, как видно, требует 2 типа проверок - при наборе и при отправке. Чтобы было допустимо "Саша<пробел>" при наборе, но не при отправке. 

Это сообщение отредактировал(а) 12345c - 11.5.2006, 12:23


--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
FRAGNATIC
Дата 11.5.2006, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


Профиль
Группа: Участник
Сообщений: 901
Регистрация: 17.10.2004
Где: ICQ

Репутация: нет
Всего: 11



12345c
Спасиб =) 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0760 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.