【问题标题】:Regex reject string if it contains only certain characters [duplicate]正则表达式拒绝字符串,如果它只包含某些字符[重复]
【发布时间】:2021-10-23 13:45:47
【问题描述】:

我正在尝试在 .Net 应用程序中使用 C# 中的正则表达式来实现以下目标

我需要限制包含“仅”这三个特殊字符(即 #、@ 和 %)的字符串。允许任何其他字符

一些例子

ab#c - 允许

abc#@ - 允许

#%abc - 允许

#@% - 不允许

##@ - 不允许

我尝试了什么 ^(?!(#|@|%)+$) 但它似乎没有按预期工作。我哪里错了?

我在属性上使用数据注释,所以我正在寻找一种可以排除不正确输入字符串的正则表达式模式。我无法使用Regex.IsMatch() 函数。

澄清:我的字符串应该接受任何字符。唯一应该失败的情况是输入字符串只有 #、@ 或 %。

【问题讨论】:

  • 这个^[#@%]+$ 对你有用吗?
  • [^#@%]+ - 除#, @, %之外的至少一个符号?
  • 如果您将$ 和单词字符视为“有效”,则需要^[#@%$]*[\w$][\w$#@%]*$。请说明您的要求。
  • 所以情况是我的字符串可以接受任何字符。我想要的唯一限制是限制只有 #、@ 或 % 的字符串。
  • 然后^[^#@%]*$ 或^[^#@%]+$

标签: c# asp.net regex


【解决方案1】:

这并不优雅,但可以完成我认为的工作:^[\w#@%]*\w+[\w#@%]*$

Works for your examples

我用“非特殊”字符表示\w。

【讨论】:

  • ^[#@%]*\w[\w#@%]*$ 更理想。注意它包括_。
  • @WiktorStribiżew 如果是 %$$,它会失败。 % 是无效的,但 $ 是可以接受的。如果字符串至少包含一个有效字符,则应该是可以接受的。
  • @wickjon 那么这个答案是错误的。
猜你喜欢
  • 2020-08-25
  • 1970-01-01
  • 2011-05-05
  • 2017-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-22
相关资源
最近更新 更多