Java有一个名为“LookingAt()”的正则表达式函数,它允许对模式进行部分匹配,我的问题是:
.net是否相当于“LookingAt()”?
我可能会也可能不会将其用于KeyPress验证,但我想知道以供将来参考。
提前致谢
乔恩
答案 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