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


Автор: polosatij 2.5.2007, 17:50
возможно ли.. сли да, киньте линком "на почитать"  smile 

заранее БОЛЬШОЕ пасиба  smile 

п.с.: что-то в гоогле ничего не могу найти..

Добавлено через 11 минут и 9 секунд


странно.. нашёл.. нужно просто русские буквы использовать.. но у меня с русскими буквами почему-то не работало.. надо будет сегодня вечером посмотреть в чём трабла  smile 

Автор: polosatij 2.5.2007, 23:55

хм.. почему не работает следующий код:

Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<script language="javascript" type="text/javascript">
function isName(elem) {
    var re =  /^([A-Z]+[a-z]*)([-]{1}[A-Z]+[a-z]*|[a-z]*)$/;
    var re_ru =  /^([А-Я]+[а-я]*)([-]{1}[А-Я]+[а-я]*|[а-я]*)$/;
    
    var str = elem;
    if(str.length == 0 || !str.match(re) || !str.match(re_ru)) {
        // showError(elem); 
        alert('false');
        return false;
    }
    
    //hideError(elem);
    alert('true');
    return true;
}
</script>
</head>

<body onload="javascript:isName('Млина')>

</body>
</html>


и как заставить работать регулярные выражения с кирилицой?

Автор: polosatij 3.5.2007, 01:00
попробовал так, тоже нет: 

Код

var re_ru =  /^([\x10-\x2F]+[\x30-\x4f]*)([-]{1}[\x10-\x2f]+[\x30-\x4f]*|[\x30-\x4f]*)$/;



 smile 

Автор: ksnk 3.5.2007, 09:27
Цитата(polosatij @  2.5.2007,  23:55 Найти цитируемый пост)
charset=iso-8859-1"
 Вот это - принципиально?
Как правило, если хотят работать с кирилицей, пишут charset=windows-1251

Автор: polosatij 3.5.2007, 09:57
Цитата(ksnk @  3.5.2007,  09:27 Найти цитируемый пост)
Вот это - принципиально?


smile

ет я по запарке там оставил.. с charset=windows-1251 у меня всё равно ничего не работает  smile 




Автор: ksnk 3.5.2007, 10:06
А знаки + в регулярном выражении что по твоему должны означать?
А с мат-логикой в школе дружил? Замени местами || на && в if'е
Код

function isName(elem) {
    var re =  /^([A-Za-z]*)([-]{1}[A-Za-z]*|[a-z]*)$/;
    var re_ru =  /^([А-Яа-я]*)([-]{1}[А-Яа-я]*|[а-я]*)$/;
    var str = elem;
    //alert(str.match(re_ru))
    if(str.length == 0 || (!str.match(re) && !str.match(re_ru))) {
        // showError(elem); 
      //  alert('false');
        return false;
    }
    
    //hideError(elem);
 //   alert('true');
    return true;
}

Глубиный смысл этих регулярников - ниасилил.... Расскажи, чего это должно было быть!

Автор: Zeroglif 3.5.2007, 11:01
Цитата(ksnk @  3.5.2007,  10:06 Найти цитируемый пост)
А знаки + в регулярном выражении что по твоему должны означать?

одно и более повторений

Интересно всё-таки посмотреть на строку, которую ловят таким регулярным.

Код

/^([А-Я]+[а-я]*)([-]{1}[А-Я]+[а-я]*|[а-я]*)$/

/*
Assert position at the start of the string «^»
Match the regular expression below and capture its match into backreference number 1 «([А-Я]+[а-я]*)»
   Match a single character in the range between "А" and "Я" «[А-Я]+»
      Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
   Match a single character in the range between "а" and "я" «[а-я]*»
      Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
Match the regular expression below and capture its match into backreference number 2 «([-]{1}[А-Я]+[а-я]*|[а-я]*)»
   Match either the regular expression below (attempting the next alternative only if this one fails) «[-]{1}[А-Я]+[а-я]*»
      Match the character "-" «[-]{1}»
         Exactly 1 times «{1}»
      Match a single character in the range between "А" and "Я" «[А-Я]+»
         Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
      Match a single character in the range between "а" and "я" «[а-я]*»
         Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
   Or match regular expression number 2 below (the entire group fails if this one fails to match) «[а-я]*»
      Match a single character in the range between "а" and "я" «[а-я]*»
         Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
Assert position at the end of the string (or before the line break at the end of the string, if any) «$»
*/

Автор: ksnk 3.5.2007, 11:15
Угу, так , оказывается и было задумано... Можно попробовать вот так переписать
Код

    var re =  /^[A-Z]+[a-z]*(-[A-Z]+[a-z]*)?$/;
    var re_ru =  /^[А-ЯЁ]+[а-яё]*(-[А-ЯЁ]+[а-яё]*)?$/;

Несколько более правильно и букав меньше...


Автор: polosatij 3.5.2007, 13:35
Цитата(ksnk @  3.5.2007,  10:06 Найти цитируемый пост)
А с мат-логикой в школе дружил?



математика? хе-хе  smile  самый любимый предмет  smile 


Цитата(ksnk @  3.5.2007,  10:06 Найти цитируемый пост)
Глубиный смысл этих регулярников - ниасилил.... Расскажи, чего это должно было быть!


Санкт-Петербург, например  smile 



нда.. шота я того..  smile 

пасиба всем  smile 

Автор: ksnk 3.5.2007, 14:44
Zeroglif,  я сомневался, что несколько повторяющихся больших букв в начале слова стоит считать именем. Кстати, а какой такой  тулзой можно так расшифровать регулярку?

Автор: Zeroglif 3.5.2007, 15:04
ksnk,

http://www.regexbuddy.com/

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