Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Регулярные выражения


Автор: kelt 17.10.2005, 10:57
Всем привет. Не подскажите как сделать, у меня в скрипте есть массив, определений типа

Код

var RegExp = new Array(RegRus, RegEng, RegDate)


, мне надо чтобы можно было использовать как:

Код

RegExp[i].test();


Как это замутить, а то у меня скрипт доходит до этой строчки, и выкидывает функцию.

Автор: Sardar 17.10.2005, 15:26
Всё потому что под именем RegExp есть встроенная функция-конструктор регулярного выражения. Переопределить подобные "нативные" функции(Array, Object, Function etc) нельзя. Дай переменной другое имя.

Во вторых test ты вызываешь у массива, а он такого метода естественно не имеет. Вопрос на встречу: чем руководствовался когда писал код? smile

Какова конкретно задача?

Автор: sharq 17.10.2005, 15:37
kelt

Код

<html>
<head>
</head>
<body>
    <script>
        var ReExpArray = new Array(/rus/i, /eng/i, /^\d{2}\-\d{2}\-\d{4}$/);
        
        function check() {
            if (document.getElementById('date').value.match(ReExpArray[2])) {
                alert('ok!');
            } else {
                alert('no');
            }
        }
        
    </script>
    
    <input id="date"><input type="button" value="Check" onClick="check();">
</body>
</html>


Все работает.

smile

Автор: kelt 18.10.2005, 06:22
Что касается чем руководствовался, да просто надо было оптимизировать код вот и решил, сделать через массив. Но это уже не важно я код написал, и он работает.
У меня другой вопрос, не подкините пример масссива который проверяет слово введено с помощью русских букв, и с помощью латинского алфавита. Заранее спасибо.

Автор: GIK 18.10.2005, 10:11
А зачем тебе массив для проверки слова?
Объясни подробнее, что ты хочеш?

Автор: kelt 18.10.2005, 10:39
мне надо проверить введены ли слово на русском языке, а для другова на английском, вот мне и надо написать регулярное выражение.

Автор: GIK 18.10.2005, 12:38
Вот набросал немного, если это то что тебе надо.
Код

function valEngland()
{ if (valEn())
   alert("Вы ввели неправильно")
    
}

function valEn()
{
var valE=document.getElementById("txt").slovo1.length;
var valR=document.getElementById("txt").slovo1.value;

for (i=0; i<valE; i++)
 { var engl = valR.charAt(i); 
    if (engl !='\w')
   {return true;}
  else {return false;}
  
}



Код

<form id='txt'>
 <input type=text name=slovo1>
 <input type=text name=slovo2>
 </form>


Это проверка на наличие английских букв.
С рускими то же самое, (если чесно не помню символ отыскивающий русские буквы)

Автор: kelt 18.10.2005, 13:24
А что целиком все слово нельзя проверить?
типа с помощью /\w+/.test(document.forms[0].element.value) ничего нет?

Автор: sharq 18.10.2005, 14:08
Для english /[A-Za-z]+/ или чуть шире /\w+/

Для russian /[А-Яа-я]+/.

smile

Автор: kelt 18.10.2005, 14:46
При таком коде он все равно прорускает и русские буквы и цыфры.

Автор: Sardar 19.10.2005, 01:02
Всё верно, задавать нужно русские буквы как юникодовские мнемоники \uHHHH
Узнать их можно простым кодом alert("Первая буква".charCodeAt(0).toString(16)); выдаст шестнадцатиричный код буквы 'П'. При этом мы точно должны знать что видим не каракули, т.е. кодировка страницы верная. JS работает в юникоде, потому код выдаст в юникоде.
Помним что в юникоде буква Ё находиться отдельно smile

Автор: Aliance 19.10.2005, 23:28
Цитата(sharq @ 18.10.2005, 15:08)
Для english /[A-Za-z]+/ или чуть шире /\w+/

Для russian /[А-Яа-я]+/.

Кстати, как где-то вычитал, в Мозилле это будет работать не так, как ожидается.

Автор: Aliance 20.10.2005, 15:41
Ага, вот, нашел:
Цитата

символ \w в мозилле найдёт и кирилические буквы!

Автор: sharq 20.10.2005, 20:27
Возможно, это и так, поэтому нужно явно задавать шаблон символов, т.к. \w содержит и буквы, и числа, и _.

smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)