2011-09-20 41 views
-1

我使用這個正則表達式來驗證文本框中的科學記數法,但它不起作用。這不允許鍵入任何內容。有人能告訴我爲什麼這個正則表達式不起作用嗎?

regex = new Regex("[-+]?(0?|[1-9][0-9]*)(\\.[0-9]*[1-9])?([eE][-+]?(0|[1-9][0-9]*))?"); 

在此先感謝。

+4

您是否嘗試過使用Darek Slager的.NET Regex測試器來解決表達式問題? http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx –

+4

如果您發佈應該/不應該通過的示例,可能會有所幫助。 – RobinGower

+0

+你是如何實際使用正則表達式的例子 - 你正在測試以查看是否有不匹配的字符,或者整個字符串必須匹配,還是..? – Dexter

回答

0

你確定這是你真正想要做的嗎?

下面是截圖來自RegexBuddy

Regex Explained

+1

儘管我喜歡RegexBuddy,但它比正則表達式本身更難以閱讀。 –

2

的問題是,你的正則表達式匹配空字符串。一個簡單的解決方案可以是在前面添加^,在末尾添加$以要求整個輸入字符串與正則表達式匹配。

這裏是一個小測試:

var numbers = new[] { 
    "0", "1", "01", "+1", "-1", "+0", "-0", "1.9", "1.09", "1.90", "1e0", "1e01", "1e10" 
}; 
var regex = new Regex("^[-+]?(0?|[1-9][0-9]*)(\\.[0-9]*[1-9])?([eE][-+]?(0|[1-9][0-9]*))?$"); 
var valid = numbers 
    .Select(n => regex.Match(n)) 
    .Where(m => m.Success) 
    .Select(m => m.Value); 

打印出valid的元素會導致如下:

0 
1 
+1 
-1 
+0 
-0 
1.9 
1.09 
1e0 
1e10 

注意如何011.901e01不匹配,但我猜這是故意的。

0
[-+]?(0|[1-9])[0-9]*([.][0-9]*)?([eE][-+]?(0|[1-9])[0-9]*)? 

是稍微接近於你想要什麼....但也許如果你給一個測試組你希望通過表情,這將有助於/失敗

相關問題