2013-12-09 2 views
1

У меня есть следующий сценарий:Нокаут проверки - IsValid() всегда верно после изменения значения

function ViewModel(){ 

    var self = this; 

    self.newQty = ko.observable().extend({   
     pattern: { 
      message: "Wrong!", 
      params: new RegExp("^[1-9][0-9]*(\\,\\d{1,2})?|0+\\,\\d{1,2}$") 
     } 
    }); 

    self.newQty.subscribe(function() { 
     if(self.newQty.isValid()) 
      doStuff(); 
    }) 
} 

newQty поле привязывается к input элементу.

Если я типа «123» в input поле, isValid() вычисляет true, и если я типа «ASD» в input коробке isValid() вычисляет false.

Проблема проявляется, когда я меняю «123» на «123a». isValid() по-прежнему оценивает значение true.

Мой вопрос: есть ли способ ручной переосмысления силы поля newQty? Я нашел несколько сообщений о том, что sugest вызывает valueHasMutated(), но я получаю ошибку Maximum call stack size exceeded, когда я ее использую.

Я использую Knockout 2.3.0 и последнюю версию плагина проверки нокаута.

Спасибо!

ответ

1

Проблема в том, что вы не избегаете своего чередования (|). Если вы добавите скобку, он должен работать:

params: new RegExp("^([1-9][0-9]*(\\,\\d{1,2})?|0+\\,\\d{1,2})$") 

Вы можете проверить это в консоли браузера:

'1234a'.test(/^[1-9][0-9]*(\\,\\d{1,2})?|0+\\,\\d{1,2}$/) //returns true 
'1234a'.test(/^([1-9][0-9]*(\\,\\d{1,2})?|0+\\,\\d{1,2})$/) //returns false 
+0

Большое спасибо. Я провел много времени, глядя в неправильном направлении. Что я могу сказать, Regex походит на волшебство для меня :) – marac

+0

Нет проблем - Regexpal.com - хорошее место, чтобы проверить эти вещи. (У меня нет связи с сайтом, я просто использовал его много лет). – ach

Смежные вопросы