【问题标题】:Regex does not work properly [closed]正则表达式无法正常工作[关闭]
【发布时间】:2016-09-29 11:55:09
【问题描述】:

我有一个 Windows 窗体,其中有一个文本框。我想使用 Regex 检查插入的文本不包含任何其他字符,除了:

  1. 字母 [a-z] 或 [A-Z]
  2. 数字,0-9
  3. _(下划线)或 . (点)

我写的这行代码似乎不能正常工作。
在 VB.NET/C# 中:

Regex.IsMatch(txtCreateDomain.ToString(), "^[a-zA-Z0-9_.]*$")

例如,我想创建一个如下所示的变量:
C#

bool isValid = Regex.IsMatch(txtCreateDomain.ToString(), "^[a-zA-Z0-9_.]*$")

VB

Dim isValid As Boolean = Regex.IsMatch(txtCreateDomain.ToString(), "^[a-zA-Z0-9_.]*$")

我错过了什么?

【问题讨论】:

  • 如果txtCreateDomain 是一个文本框,你应该调用txtCreateDomain.Text 而不是ToString()

标签: c# .net regex vb.net validation


【解决方案1】:

试试这个:

Regex.IsMatch(txtCreateDomain.ToString(), "^[a-zA-Z0-9_.]*$")

编辑:

由于您正在尝试验证域名,因此更好的解决方案是使用here 描述的解决方案:

// https://stackoverflow.com/a/967610/162671
private static bool IsValidDomainName(string name)
{
    return Uri.CheckHostName(name) != UriHostNameType.Unknown;
}

或者是这样的:

var valid = false;
try
{
    var uri = new Uri("http://example.com/");
    valid = false;
}
catch (UriFormatException){
    valid = false;
}

【讨论】:

  • @Nasreddine 如果点在字符类中,则不是。
  • 我今天学到了一些东西。感谢@user6188402 和 lbarros。
  • 从我的正则表达式中,我希望所有这些案例都是有效的: domain.intern , domain1.intern , my-domain.intern @user6188402
  • @drgmak 你要验证域名吗?
  • @Nasreddine 是的,我是。
【解决方案2】:

您忘记了下划线和破折号:

bool isValid = Regex.IsMatch(txtCreateDomain.Text, "^[a-zA-Z0-9_.-]*$")

【讨论】:

  • 这只会检查文本是否包含所有这些对吗?从我的正则表达式中,我希望所有这些案例都是有效的: domain.intern , domain1.intern , my-domain.intern
  • 所有这些都会匹配,是的。但是,如果您想验证域名,可以查看:stackoverflow.com/questions/24730805/…safaribooksonline.com/library/view/regular-expressions-cookbook/…
  • 谢谢,这解决了我的问题。 :)
  • 很好,不过,问题应该包含回答它所需的所有细节。我没有发现你的回答有问题,只是问题本身。
  • 对于问题中的错误,我深表歉意。感谢您的帮助。感谢您的时间
【解决方案3】:
/^\w+$/

\w is equivalent to [A-Za-z0-9_]

【讨论】:

  • user6188402 - 谢谢通知我。我是新来的,所以不是。
  • \w is equivalent to [A-Za-z0-9_] - 默认情况下不在 .NET 中。
猜你喜欢
  • 1970-01-01
  • 2012-05-25
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多