2009-01-26 49 views
2

Java有所謂的「LookingAt()」一個正則表達式的功能,這將使部分匹配反對模式,我的問題是:等價於Java的「在.net中查找()」?

.NET是否有「LookingAt()」的等效?

我可能會也可能不會將它用於KeyPress驗證,但我只想知道以供將來參考。

在此先感謝

喬恩

+0

那麼你也打算防止從剪貼板粘貼?當用鼠標完成時,這甚至不會觸發按鍵事件。 – Tomalak 2009-01-26 15:25:40

+0

如果我需要,我可以在另一個事件上調用驗證....這不是真正的問題 – wheelibin 2009-01-26 15:49:00

+0

但是如果您的限制可以輕鬆繞過,那麼您解決了什麼問題? – Tomalak 2009-01-26 15:52:42

回答

3

我不認爲lookingAt()是你正在嘗試做的正確模型。它所做的就是將匹配定位到輸入的開頭,就好像您在正則表達式的開始處使用了^開始錨點,並且調用find(),這在.NET中模擬會很微不足道。

我認爲你要做的是防止用戶輸入無效數據。例如,如果文本字段需要帶有兩位小數的十進制數,則您的驗證正則表達式可能爲\d+\.\d\d。如果用戶開始輸入數字,則正則表達式不匹配,但可能是是有效條目的一部分,因此您可以讓它們繼續輸入。但是,如果用戶鍵入'z',則會阻止它,因爲它無法成爲有效條目的一部分。

換句話說,你不想知道正則表達式是否匹配字符串的一部分,你想知道字符串是否匹配正則表達式的一部分。有一種方法可以在Java中使用hitEnd()方法來做到這一點,但我不認爲.NET具有相同的功能。事實上,我不知道任何其他的正則表達方式。

但在我看來,阻止用戶的按鍵是無禮的。我更願意通過其他方式讓他們知道他們的輸入是無效的。例如,您可以以紅色顯示文本字段的內容,或禁用它們用來提交條目的按鈕(或兩者)。每次文本字段發生變化時,都會根據您的(完整)正則表達式檢查內容,並相應地更新字段和/或按鈕的狀態。

這裏的示範hitEnd()

import java.util.regex.*; 

public class Test 
{ 
    public static void main(String[] args) throws Exception 
    { 
    Pattern p = Pattern.compile("\\d+\\.\\d\\d"); 
    Matcher m = p.matcher(""); 
    String[] tests = { "5.99", "5", "@" }; 
    for (String s : tests) 
    { 
     if (m.reset(s).matches()) 
     { 
     System.out.println("full match"); 
     } 
     else if (m.hitEnd()) 
     { 
     System.out.println("partial match"); 
     } 
     else 
     { 
     System.out.println("no match"); 
     } 
    } 
    } 
} 

我得到第三的第一個「全場比賽」,第二個「部分匹配」和「不匹配」。

1

這可能不是有關你的情況,但總體上這不是一個好主意,因爲某些語言往往需要結合鍵來輸入字符:一個「A」是通常通過鍵入^和a鍵入。如果您只想允許字母數字鍵幷包含â,則可能會阻止他們進入,如果您不允許^。

0

您可以使用javascript來禁用密鑰。你只需要找到你正在禁用的鍵的keyCode,就可以禁用鍵盤上的返回鍵或回車鍵。

//此功能禁用回車鍵,以便用戶不能輸入一堆空格。 (e){ var pK = e?( ) e.which:window.event.keyCode; return pK!= 13; } document.onkeypress = kH;如果(document.layers)document.captureEvents(Event.KEYPRESS);

以下是列出鍵盤所有鍵碼的頁面。 13是爲回車鍵,以便在此功能,我讓所有的鑰匙!= 13

http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001686.html

1

下面是一些代碼,我用正則表達式來檢查的電子郵件地址。我不確定這是你想要的嗎?

Regex emailregex = new Regex("(?<user>[^@]+)@(?<host>.+)"); 
     string s = "[email protected]"; 

     Match m = emailregex.Match(s); 


     if (m.Success) 
     { 

     do something here 


}