2008-12-04 24 views
5

Girilen dize Vehicle Identification Number (VIN) gibi görünüyorsa ön kontrol yapmak istiyorum. Bunu ben, O ve Q VIN içinde izin verilmez 17 harf ve rakam ancak harflerden oluşur biliyorum, bu yüzden bu normal bir ifade kullanın: Ben RegularExpressionValidator ile 1G1FP22PXS2100001 gibi bir dize kontrol eğer başarısız ŞimdiRegularExpressionValidator, Regex'ten başka bir lezzet kullanır mı?

^[0-9A-Z-[IOQ]]{17}$ 

ancak bu OnServerValidate olay işleyicisiyle birlikte CustomValidator, iyi çalışıyor.

Deneyler, RegularExpressionValidator'un Character Class Subtraction desteklemediğini, ancak Regex sınıfının ne yaptığını gösterir.

Şimdi bu iki .NET sınıfının neden farklı regex tatları kullandığını merak ediyorum. Bir şey belgelendi mi?

+0

Bağlantılarda yorumlarıma "gizleme" yerine doğrudan cevabımda yer aldım. – VonC

cevap

5

RegularExpressionValidator, JavaScript Regex motorunun kullanıldığı JavaScript kullanarak istemci tarafı doğrulamasını da destekler. Gördüğünüz fark, JavaScript ve .NET regex uygulaması arasındaki farktır. İstemci doğrulamasını devre dışı bırakabilir ve bu nedenle onaylayıcıyı ek postalama sonrası fiyatıyla .NET regex motorunu kullanmaya zorlayabilirsiniz.

7

doğrudan cevap ama sadece bariz sözler değil: Bazı nedeni Karakter sınıfı çıkarma desteklenmediği için, her zaman geçici bir çözüm olarak kullanabiliyorsanız

:

^[0-9A-HJ-NPR-Z]{17}$ 

ne belgelemek için Bu sorunun yorumlarını koydum:

How to: Validate Against Patterns for ASP.NET Server ControlsRegularExpressionValidator Class .Net documentation yılında mentionned javascript istemci tarafında regex doğrulayıcı "karakter sınıfı çıkarma"

bilmiyor: tarayıcısının desteklemediği sürece

Hem sunucu tarafı ve istemci tarafı doğrulama yapılmaktadır İstemci tarafında doğrulama veya istemci tarafı doğrulaması açıkça devre dışı bırakılır (EnableClientScript özelliğini yanlış olarak ayarlayarak).

Düzenli ifade doğrulama uygulaması, istemciden sunucuya göre biraz farklıdır. İstemcide, JScript düzenli ifade sözdizimi kullanılır.
Sunucuda, System.Text.RegularExpressions..::.Regex sözdizimi kullanılır.
JScript düzenli ifade sözdizimi System.Text.RegularExpressions..::.Regex sözdizimi bir alt kümesidir.
JScript düzenli ifade sözdiziminin, hem istemcide hem de sunucuda aynı sonuçları vermesi için kullanılması önerilir.

bu yan etkisinin bir başka örnek (sunucu ve istemci tarafı arasında farklı normal ifade tatlar) RegularExpressionValidator woes blog girişinde mentionned edilir.

+0

IMHO, bu geçici çözüm değil, bunu yapmanın tek yolu bu. "Karakter sınıfı çıkarma" gibi bir şeyin bile var olduğunun farkında değilim. Ya da bazı garip regex lezzetlerinde mi? – Tomalak

+0

2004'ten beri .Net regex altyapısında, ancak http://msdn.microsoft.com/en-us/library/6xh899wy(VS.85).aspx, javascript istemci tarafı regex validator tarafından belirtildiği gibi "karakter sınıfı çıkarma" bilmiyor ... – VonC

+0

İstemcide, http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.regularexpressionvalidator.aspx 'de belirtildiği gibi, JScript düzenli- ifade sözdizimi kullanılır. Sunucuda, System.Text.RegularExpressions .. :: Regex sözdizimi kullanılır. => JScript düzenli ifade sözdizimi kullanılmalıdır. – VonC

İlgili konular