[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Регулярные выражения функция search
kent666
Всем привет!
Не могу найти ошибку в работе функции 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: а у меня все работает smile.gif http://jsfiddle.net/f6TgQ/4/

Спустя 9 минут, 6 секунд (18.01.2012 - 11:13) kent666 написал(а):
Winston у меня пример
        <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 попадает аргумент
/^[a-zа-я]+$/i

но почему то все равно выдает НЕ совпадение

Спустя 14 минут, 23 секунды (18.01.2012 - 11:38) kent666 написал(а):
Блин это все из за кавычек.

В 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');
}

Спустя 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 надо проверять.

Спустя 13 минут, 56 секунд (18.01.2012 - 12:07) Winston написал(а):
Цитата (kent666 @ 18.01.2012 - 10:38)
что можно сделать с кавычками?

http://alt-f4.ru/trim-in-javascript
Только вместо пробелов, нужно прописать кавычки.

Спустя 3 минуты, 13 секунд (18.01.2012 - 12:10) kent666 написал(а):
гляньте пожалуйста
http://kent666.16mb.com/read/all/contacts
может ошибка в чем то другом? unsure.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.