【问题标题】:Using RegularExpressionValidator how can I check whether a textBox includes either an at (@) or a hyphen (-)?使用 RegularExpressionValidator 如何检查文本框是否包含 at (@) 或连字符 (-)?
【发布时间】:2016-06-06 13:38:17
【问题描述】:

我知道这是非常基本且不彻底的验证,但文本框需要接受例如 name@email.com 以及 4556-222-44444。

我试过了

<asp:RegularExpressionValidator Display="Dynamic" runat="server" ControlToValidate="txtAddToBlacklist" 
ErrorMessage="Invalid" ValidationExpression="^[\-\@]$"></asp:RegularExpressionValidator>

此尝试包括转义反斜杠无济于事。

我使用“[-@]”来检查是否存在的逻辑来自this answer

我知道连字符必须在开头或结尾,但由于它只有两个字符,我认为这不是问题。

包含 ^ 和 $ 似乎是推荐的做法,以防止附加恶意附加内容。

一定是遗漏了一些东西,所以感谢您的帮助!

【问题讨论】:

  • 如果不放^和$怎么办?事实上,您的正则表达式不允许任何其他字符,而不是属于字符类的字符。
  • @ConnorsFan 不幸的是,没有他们似乎没有任何区别。
  • 可能是字符转义(我没有检查过)。您可以在各种网站上测试您的正则表达式,例如:regex101.com。它将允许您进行实验。 (在我看来,[-@] 有效)。
  • 不应该是^.*[-@].*$^$ 是字符串的开头和结尾,因此您需要介于两者之间的字符。否则你只是检查字符串“@”和“-”。
  • @H.deJonge 您提出的答案“^.*[-@].*$”有效,您想重新发布作为答案吗?不过,作为额外的,你知道如何使它适用于多行文本区域吗? (如包括新行)

标签: c# asp.net regex


【解决方案1】:

^$ 分别是。字符串的开始和结束。这意味着您的正则表达式仅针对字符串“@”和“-”进行测试。

如果您使用^.+[-@].+$,您将针对在字符串中包含上述字符的字符串进行测试。

对于多行,您可能想尝试类似^(.+[@-].+\n?)*$ 的操作。 (这仍然需要一些令人费解的地方。我在换行符之后添加了?,因为它不应该在最后一行是强制性的,但是这样“bla@bla.com@test.lan”也将测试为阳性。)调整它以满足您的需求。

我不是正则表达式之王,但使用在线正则表达式工具(例如 http://www.regexr.com/)来构建和测试我的表达式。

附带说明:要获得正则表达式技能,您可以尝试解决这些https://regexcrossword.com/

【讨论】:

    猜你喜欢
    • 2016-03-26
    • 1970-01-01
    • 2021-03-04
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 2015-07-31
    相关资源
    最近更新 更多