相当于.net中的Java“LookingAt()”?

时间:2009-01-26 15:13:39

标签: .net regex

Java有一个名为“LookingAt()”的正则表达式函数,它允许对模式进行部分匹配,我的问题是:

.net是否相当于“LookingAt()”?

我可能会也可能不会将其用于KeyPress验证,但我想知道以供将来参考。

提前致谢

乔恩

4 个答案:

答案 0 :(得分:3)

我认为lookingAt()是您正在尝试做的正确模型。它所做的就是将匹配锚定到输入的开头,就像你在正则表达式的开头使用^起始锚并调用find()一样,这样做很容易模仿。净。

我认为您要做的是阻止用户输入无效数据。例如,如果文本字段需要带有两个小数位的十进制数,则验证正则表达式可能为\d+\.\d\d。如果用户通过键入数字开始,则正则表达式不匹配,但数字可以成为有效条目的一部分,因此您可以让他们继续键入。但是如果用户键入'z',则会阻止它,因为它无法成为有效条目的一部分。

换句话说,您不想知道正则表达式是否与字符串的一部分匹配,您想知道该字符串是否与正则表达式的一部分匹配。有一种方法可以使用hitEnd()方法在Java中实现这一点,但我不认为.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 :(得分:1)

这可能与您的情况无关,但一般来说这不是一个好主意,因为某些语言通常需要组合键来输入字符:“â”通常通过键入^和a来键入。如果您只想允许使用字母数字键并希望包含â,则可能会阻止他们进入,如果您不允许^。

答案 2 :(得分:1)

以下是我用来检查带有正则表达式的电子邮件地址的一些代码。我不确定这是不是你想要的?

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

        Match m = emailregex.Match(s);


        if (m.Success)
        {

        do something here


}

答案 3 :(得分:0)

您可以使用javascript来禁用密钥。您只需找到要禁用的键的keyCode,即可禁用键盘上的返回或输入键。

//此函数禁用enter键,以便用户无法输入一堆空格。 函数kH(e){     var pK = e? e.which:window.event.keyCode;     返回pK!= 13; } document.onkeypress = kH; if(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