Knockout-Validation с использованием регулярного выражения для проверки номера телефона

Я пытаюсь добавить простую проверку регулярного выражения к одному из моих наблюдаемых с помощью Knockout-Validation.

У меня есть следующее:

self.ContactPhone = ko.observable().extend({
            required: true,
            pattern: {
                message: 'Invalid phone number.',
                params: '^\D?(\d{3})\D?\D?(\d{3})\D?(\d{4})$'
            }
        });

Однако независимо от того, что я ввожу, он возвращает сообщение «Неверный номер телефона». Есть ли определенный способ форматирования выражения? Я протестировал его, используя только JavaScript, и он отлично работает.


person ThreadedLemon    schedule 02.04.2013    source источник


Ответы (3)


Вам нужно экранировать обратную косую черту, иначе javascript будет рассматривать вашу обратную косую черту как escape-символ для следующего символа. Это потому, что это строка, а не литерал регулярного выражения.

Редактировать: на самом деле я только что проверил, и вместо этого вы можете просто использовать литерал регулярного выражения, так что любой из них сделает это:

http://jsfiddle.net/antishok/ED3Mh/2/

self.ContactPhone = ko.observable().extend({
    required: true,
    pattern: {
        message: 'Invalid phone number.',
        params: /^\D?(\d{3})\D?\D?(\d{3})\D?(\d{4})$/            
    }
});

or:

params: '^\\D?(\\d{3})\\D?\\D?(\\d{3})\\D?(\\d{4})$'
person antishok    schedule 03.04.2013

Если вам не нужно использовать регулярное выражение, вот собственный способ

self.ContactPhone = ko.observable().extend({ phoneUS : true });

Другие перечислены здесь.

person Jeson Martajaya    schedule 07.03.2014
comment
Знаете ли вы, почему phoneUS не указан на официальном веб-сайте Knockout Validation — github.com/Knockout-Contrib/Knockout-Validation/wiki/ ? - person Dan Nissenbaum; 21.04.2015

См. приведенный ниже рабочий пример в jsfiddle с использованием регулярного выражения, которое допускает использование пробелов и + и () вместе с числом по ссылке.

jsfiddle.net/Джоэл Деррик/f6g8npv6/1/

person Joel    schedule 30.06.2015