Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.02.2014, 17:56
Новичок на форуме
Отправить личное сообщение для cajka Посмотреть профиль Найти все сообщения от cajka
 
Регистрация: 15.02.2014
Сообщений: 2

Регулярные выражения в javascript-е - русские буквы
Помогите с регулярными выражениям в javascript-e. Нужно проверить поле формы на ввод русских букв, разрешаются только русские буквы.

Регулярное виражные такое:

var per_name =/^[А-Я]$/i;
if(!per_name.test(name)){
var text = "Разрешены только русские буквы";
}

Но оно не работает. Даже когда вводишь русские буквы, условие срабатывает.

Как правильно писать нужно?
Ответить с цитированием
  #2 (permalink)  
Старый 15.02.2014, 18:16
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

<form onsubmit="alert('все ок'); return false">
<input type="text" pattern="[а-яА-ЯёЁ]+" required title="Можно использовать только кириллицу" />
<button type="submit">Отправить</button>
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 16.02.2014, 08:45
Новичок на форуме
Отправить личное сообщение для cajka Посмотреть профиль Найти все сообщения от cajka
 
Регистрация: 15.02.2014
Сообщений: 2

Спасибо.
Ответить с цитированием
  #4 (permalink)  
Старый 16.02.2014, 10:01
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Должен отметить что HTML5 валидация не работает в старых браузерах. Кроме-того, не всем нравится реализация в браузерах.
Тем не менее, атрибут pattern и required можно всегда использовать, в добавок, если реализация браузера устраивает, подключить polyfill для старых браузеров. Если не устраивает - все равно можно опираться на эти атрибуты. Кстати такой полифил как WebShims позволяет заменить UI на новых браузерах.

Сообщение от cajka
Но оно не работает
У тебя лишнее отрицание. У тя регулярка ищет невалидные символы. Соответственно, если нашла (то есть if (re.test()) ), то алерт. А у тебя наоборот.
<form onsubmit="return false">
<input id="input" value="ффффваыа" />
<button type="submit">Отправить</button>
<script>
(function(){
var input = document.getElementById('input');
input.onchange = function() {
var name = this.value;

var per_name =/^[А-Я]$/i;
if(!per_name.test(name)){
var text = "Разрешены только русские буквы";
}


alert(text || 'Все ок');

};

})();
</script>
</form>
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #5 (permalink)  
Старый 16.02.2014, 11:03
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 31,372

вариант ...
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>

<body>
<form onsubmit="return false">
<input id="input" value="ффффваыа" />
<button type="submit">Отправить</button>
<script>
(function(){
var input = document.getElementById('input');
input['oninput' in input ? 'oninput' : 'onpropertychange'] = function() {
var name = this.value;
var per_name =/[^А-ЯЁ]/i;
if(per_name.test(name)){
var text = "Разрешены только русские буквы";
}
text && alert( text);
};
})();
</script>
</form>
</body>
</html>
Ответить с цитированием
  #6 (permalink)  
Старый 16.02.2014, 12:26
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Мой вариант, как я и предлагал, в декларативном стиле с fallback'ом на нативную валидацию, скрипт обходит все инпуты:

<!DOCTYPE html>
<meta charset="utf-8" />
<form onsubmit="return false">
    <input id="input" value="ффффваыа" pattern="[а-яА-ЯёЁ]+" required="" title="Разрешены только русские буквы" />
    <button type="submit">Отправить</button>
    <script>
    (function(){
        var inputs = document.getElementsByTagName('input');
        for (var i = 0, input; input = inputs[i]; i++) {
            if (input.type == 'text') {
                input.oninput = oninput;
                // input['oninput' in input ? 'oninput' : 'onpropertychange'] = oninput; // for IE8
            }
        }
        function oninput() {
            var valid = true;
            if ('required' in this.attributes) {
                valid = valid && this.value != '';
            }
            if ('pattern' in this.attributes) {
                var pattern = new RegExp('^' + this.getAttribute('pattern') + '$', 'gi');
                valid = valid && pattern.test(this.value);
            }
            if (!valid) {
                alert(this.title);
            }
        }
    })();
    </script>
</form>
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #7 (permalink)  
Старый 16.02.2014, 22:05
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,719

Сообщение от cajka
var text = "Разрешены только русские буквы";
var text - 3 русские буквы.
Ответить с цитированием
  #8 (permalink)  
Старый 16.02.2014, 22:10
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,719

Из континуума выпадает только ё, остальное с перерывом на казахские "буквы" идет сплошняком. Вариант предыдущего читателя рони в точности.

И вообще, зачем проверять - по кейпапам берите коды и в кириллицу по кодировке. И все. Кто не переключился - сам виноват.
Ответить с цитированием
  #9 (permalink)  
Старый 17.02.2014, 04:57
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от kostyanet
var text - 3 русские буквы.
Ну мог бы и уточнить, что правильно будет "кириллица", а не "русские буквы".
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #10 (permalink)  
Старый 17.02.2014, 11:05
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,719

Так кириллицы натырена с нескольких алфавитов, в том числе и латинского. Так что есть там русские буквы в слове hello word
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярные выражения для javascript qwert_ukg Общие вопросы Javascript 3 20.04.2012 13:45
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34
Русские буквы квадратиками thunder2 Библиотеки/Тулкиты/Фреймворки 3 25.12.2009 00:10
русские буквы в графиках js charts Melichron Элементы интерфейса 22 11.09.2009 18:41