2016-04-07 19 views
1

Not: Bu, geçerli bir e-posta biçimi için test etme ile ilgili bir soru değil, daha ziyade false için doğru yolu nasıl test edeceğinizle ilgili bir soru değildir. (Başka bir) regex tartışmasını önlemek için çalışıyorum :-)Falsy değeri için Javascript testi düzenli ifadesi

Giriş değeri geçerli bir e-posta olup olmadığına bağlı olarak bir hatayı göstermek veya gizlemek için nakavt kullanıyorum. regex == false tarayıcı güvenlidir veya farklı tarayıcılar farklı bu muamele yapmak ise

<input type="text" id='email' data-bind="textInput:email" /> 
<p data-bind="visible: /^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,}$/i.test(email()) == false"> Email must be valid.</p> 

var signup = {   
    email:ko.observable("") 
}; 
ko.applyBindings(signup); 

Sorum testi olup olmadığıdır: İşte benim kodudur. Kromda test ediyorum ve iyi çalışıyor gibi görünüyor. Eğer bunu yapmanın doğru yolu değilse, doğru ile tersin ifade etmek için testin bir yolu var mı?

cevap

2

!!regex ürününü bool ürününe dönüştürmek için kullanabilirsiniz. Ancak, bir if deyiminde, bu yine de yapılır (neyi kontrol ettiğinize bağlı olarak - true ve false).

Sorunuzu yanıtlamak için: Evet, yönteminiz tarayıcıda güvenlidir/tarayıcılar arası uyumludur.

0

"Doğru" mı? Bu, "doğru" ile ne demek istediğine bağlı. Evet, işe yarayacak; mdn, vurgu maden:

test() metodu düzenli ekspresyonu ve belirli bir ip arasında bir maç için, bir arama işlemi. true veya false veya döndürür.

Yani bir mantıksal değere karşılaştırmak gerek, ne de !! şive için herhangi bir ihtiyaç - ne işlevsellik-akıllıca zarar vereceğini bile.

<input type="text" id="email" data-bind="textInput: email" /> 
<p data-bind="visible: email.isValid">Email must be valid.</p> 
:

Bir şey, IMO bu ek cevabı warranting olsa nota muhtemelen görünümü içinde ki mantığını yerleştirmek değil, ancak bunun yerine görünüm modeli içine yerleştirmek yerine computed kullanmak gerektiğidir

var signup = {   
    email: ko.observable("") 
}; 

signup.email.isValid = ko.computed(function() { 
    return /^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,}$/i.test(signup.email()); 
}); 

ko.applyBindings(signup); 

Bu kod, büyük olasılıkla, IE sürümleri de dahil olmak üzere, düşünmemeyi tercih ettiğim bir tarayıcı gibi çalışır. isValid'un bir boolean (kendi isminden ve belki de yazmanız gereken birim testleri dışında) döndürdüğü bazı kodlarla ilgili ipuçlarını eklemeyi tercih ederseniz, diğer cevapta belirtilen !! deyiminde yaptığınız gibi false ile karşılaştırmayı tercih ederim soru.

İlgili konular