Не могу найти ошибку в работе функции search()
У меня есть валидатор формы который работает на функции search()
внутрь ее вноситься регулярное выражение. которое потом сопоставляется на соответствие с внесенными данными
В поле имя вносяться любые символы латиницы и кирилицы (регистр не важен)
регулярное выражение
/^[a-zа-я]$/ui
но внеся хоть один кирилический или латинский символ, функция дает значение -1 т.е. ОШИБКУ!
При этом в консоли ошибок не выдает :blink:
Спустя 47 минут, 47 секунд (18.01.2012 - 11:04) kent666 написал(а):
<script type="text/javascript">
var value = 'Nекст';
var res = value.search('/^[a-zа-я]+$/i');
alert(res);
</script>
Выдает - 1
Где то я не правильно составил регулярное выражение!!
Блин на php проверка работает как
preg_match("#^[a-zа-я]+$#ui", $POST['value1'])
Спустя 44 секунды (18.01.2012 - 11:04) Winston написал(а):
JS и так работает в UTF-8 (если не ошибаюсь). И в JS нету модификатора u (если не ошибаюсь)
PS: а у меня все работает
http://jsfiddle.net/f6TgQ/4/
PS: а у меня все работает

Спустя 9 минут, 6 секунд (18.01.2012 - 11:13) kent666 написал(а):
Winston у меня пример
тоже выдает 0
но если я использую кавычки value.search('/^[a-zа-я]+$/i')
-1
но в функции тоже выдает ЛОЖЬ
<script type="text/javascript">
var value = 'Nекст';
var res = value.search(/^[a-zа-я]+$/i);
alert(res);
</script>
тоже выдает 0
но если я использую кавычки value.search('/^[a-zа-я]+$/i')
-1
но в функции тоже выдает ЛОЖЬ
/**
* Validate.js: ненавязчивая проверка HTML-форм.
*
* После загрузки документа данный модуль сканирует документ в поисках
* HTML-форм и текстовых полей в формах. Если обнаруживаются элементы
* с атрибутом "required" или "pattern", к ним добавляются соответствующие
* обработчики событий, выполняющие проверку данных формы.
*
* Если элемент формы имеет атрибут "pattern", значение этого атрибута
* используется как регулярное JavaScript-выражение, а элементу назначается
* обработчик события onchange, который проверяет ввод пользователя с помощью
* этого шаблона. Если данные не соответствуют шаблону, цвет фона элемента
* ввода изменяется, чтобы привлечь внимание пользователя.
* По умолчанию текстовое поле должно содержать некоторую подстроку, которая
* соответствует шаблону. Если требуется указать более строгое соответствие,
* используйте якорные элементы ^ и $ в начале и конце шаблона.
*
* Элемент формы с атрибутом "required" должен содержать какое-либо значение.
* Если быть более точным, атрибут "required" является краткой формой атрибута
* pattern="\S". То есть этот атрибут требует, чтобы поле содержало хотя бы
* один символ, отличный от пробела
*
* Если элемент формы прошел проверку, в атрибут "class" этого элемента
* записывается значение "valid". В противном случае - значение "invalid".
* Чтобы извлечь из этого модуля выгоду, необходимо вместе с ним использовать
* таблицу CSS-стилей, где определяются стили для "неправильного" класса.
* Например:
*
* <!-- для привлечения внимания окрасить фон элементов формы, содержащих
* ошибки, в оранжевый цвет -->
* <style>input.invalid { background: #fa0; }</style>
*
* Перед отправкой формы текстовые поля, требующие проверки, подвергаются
* повторной верификации. Если обнаруживаются ошибки, отправка формы
* блокируется и выводится диалоговое окно, в котором пользователю сообщается
* о том, что форма заполнена не полностью или содержит ошибки.
*
* Этот модуль не может использоваться для проверки форм или полей, в которых
* вы определили собственный обработчик событий onchange или onsubmit,
* а также полей, для которых вы определили свое значение атрибута class.
*
* Весь программный код модуля размещается внутри анонимной функции
* и не определяет ни одного имени в глобальном пространстве имен.
*/
(function() { // Все, что требуется, выполняется в этой анонимной функции
// По окончании загрузки документа вызвать функцию init()
if (window.addEventListener) window.addEventListener("load", init, false);
else if (window.attachEvent) window.attachEvent("onload", init);
// Устанавливает обработчики событий для форм и элементов форм,
// где это необходимо.
function init() {
// Цикл по всем формам в документе
for(var i = 0; i < document.forms.length; i++) {
var f = document.forms[i]; // Текущая форма
// Предположить, что форма не требует проверки
var needsValidation = false;
// Цикл по всем элементам на форме
for(j = 0; j < f.elements.length; j++) {
var e = f.elements[j]; // Текущий элемент
// Интерес представляют только поля <input type="text">
if (e.type != "text") continue;
// Проверить, имеются ли атрибуты, требующие проверки
var pattern = e.getAttribute("pattern");
// Можно было бы использовать e.hasAttribute(),
// но IE не поддерживает его.
var required = e.getAttribute("required") != null;
// Атрибут required - это лишь краткая форма записи
// атрибута pattern
if (required && !pattern) {
pattern = "\\S";
e.setAttribute("pattern", pattern);
}
// Если элемент требует проверки,
if (pattern) {
// проверять при каждом изменении содержимого элемента
e.onchange = validateOnChange;
// Запомнить, чтобы потом добавить обработчик onsubmit
needsValidation = true;
}
}
// Если хотя бы один элемент формы требует проверки,
// то необходимо установить обработчик события onsubmit формы
if (needsValidation) f.onsubmit = validateOnSubmit;
}
}
// Эта функция - обработчик события onchange для текстового поля, которое
// требует проверки. Не забывайте, что в функции init() мы преобразовали
// атрибут required в pattern.
function validateOnChange() {
var textfield = this; // Текстовое поле
var pattern = textfield.getAttribute("pattern"); // Шаблон
var value = this.value; // Данные, введенные пользователем
// Если значение не соответствует шаблону, установить значение
// атрибута class равным "invalid".
if (value.search(pattern) == -1) textfield.className = "invalid";
else textfield.className = "valid";
}
// Эта функция - обработчик события onsubmit для любой формы,
// требующей проверки.
function validateOnSubmit() {
// Перед отправкой формы выполнить проверку всех полей в форме
// и установить их свойства className в соответствующее значение.
// Если хотя бы одно из этих полей содержит ошибку, вывести диалоговое
// окно и заблокировать отправку данных формы.
var invalid = false; // Предполагаем, что все правильно
// Цикл по всем элементам формы
for(var i = 0; i < this.elements.length; i++) {
var e = this.elements[i];
// Если элемент – это текстовое поле, для которого установлен
// наш обработчик события onchange
if (e.type == "text" && e.onchange == validateOnChange) {
e.onchange( ); // Вызвать обработчик для повторной проверки
// Если проверка не пройдена, это означает, что
// вся форма не прошла проверку
if (e.className == "invalid") invalid = true;
}
}
// Если форма не прошла проверку, вывести диалоговое окно
// и заблокировать отправку формы
if (invalid) {
alert("Форма заполнена не полностью " +
"или были введены некорректные данные.\n" +
"Пожалуйста, проверьте правильность выделенных полей " +
" и повторите попытку.");
return false;
}
}
})();
Спустя 1 минута, 45 секунд (18.01.2012 - 11:15) Winston написал(а):
Цитата (kent666 @ 18.01.2012 - 10:13) |
тоже выдает 0 |
Ну вообще-то 0 - это отсутсвие ошибки.
Спустя 8 минут, 31 секунда (18.01.2012 - 11:24) kent666 написал(а):
Да я понял что 0 это совпадение
Уже и функцию дебагил,
на функцию search попадает аргумент
но почему то все равно выдает НЕ совпадение
Уже и функцию дебагил,
на функцию search попадает аргумент
/^[a-zа-я]+$/i
но почему то все равно выдает НЕ совпадение
Спустя 14 минут, 23 секунды (18.01.2012 - 11:38) kent666 написал(а):
Блин это все из за кавычек.
В HTML я в блоке указываю атрибут pattern="/^[a-zа-я]+$/i"
а при провеке в функцию search() попадает не
а
что можно сделать с кавычками?
В HTML я в блоке указываю атрибут pattern="/^[a-zа-я]+$/i"
а при провеке в функцию search() попадает не
search(/^[a-zа-я]+$/i)
а
search("/^[a-zа-я]+$/i")
что можно сделать с кавычками?
Спустя 8 минут, 58 секунд (18.01.2012 - 11:47) SlavaFr написал(а):
/^([a-zа-я]+)$/i.exec('Nекст');
alert(RegExp.$1);
или
if(/^([a-zа-я]+)$/i.test('Nекст')){
alert('ok');
}
alert(RegExp.$1);
или
if(/^([a-zа-я]+)$/i.test('Nекст')){
alert('ok');
}
Спустя 5 минут, 57 секунд (18.01.2012 - 11:53) asokol написал(а):
http://ru.wikipedia.org/wiki/%D0%9A%D0%B8%...%BE%D0%B4%D0%B5
Обратите внимание, что ё имеет код 0451.
Для прописных:
/^[\u0400-\u042f]+$/
Для строчных:
/^[\u0430-\u044f]+$/
С ё будет:
/^[\u0430-\u044f\u0451]+$/
Поведение с модификатором i надо проверять.
Обратите внимание, что ё имеет код 0451.
Для прописных:
/^[\u0400-\u042f]+$/
Для строчных:
/^[\u0430-\u044f]+$/
С ё будет:
/^[\u0430-\u044f\u0451]+$/
Поведение с модификатором i надо проверять.
Спустя 13 минут, 56 секунд (18.01.2012 - 12:07) Winston написал(а):
Цитата (kent666 @ 18.01.2012 - 10:38) |
что можно сделать с кавычками? |
Спустя 3 минуты, 13 секунд (18.01.2012 - 12:10) kent666 написал(а):