正则表达式无法正常工作[关闭]

Posted

技术标签:

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

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

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

我写的这行代码似乎不能正常工作。 在 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_.]*$")

我错过了什么?

【问题讨论】:

Related. 如果txtCreateDomain 是一个文本框,你应该调用txtCreateDomain.Text 而不是ToString() 【参考方案1】:

试试这个:

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

编辑:

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

// https://***.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 所有这些都会匹配,是的。但是,如果您想验证域名,可以查看:***.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 中。

以上是关于正则表达式无法正常工作[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Python:正则表达式无法正常工作

C# 中的正则表达式无法正常工作以进行数字检查 [重复]

正则表达式验证模式只允许一个字符[重复]

对于给定的正则表达式,R 正则表达式编译器的工作方式不同

站点安全正则表达式处理程序? (PHP) [关闭]

我如何解决munmap_chunk():regfree上的无效指针(和正则表达式)[关闭]