正则表达式:搜索密钥验证

时间:2013-09-03 15:56:17

标签: c# regex

请帮助正则表达式。我正在验证一个字符串。该值不应仅包含%,如果有%,则长度应超过3个字符,包括%。 %可以是字符串中的任何位置(包含点)。

我能想出来。只有%在字符串中时才会发生此验证。如果没有%,则无需验证。

@"^[a-zA-Z0-9'.]*%"; //{3,}$";

谢谢,Naveen

示例:

  • "%" - 失败
  • "%12" - 失败
  • "%123" - 传递
  • "%1234" - 传递
  • "12%3" - 传递
  • "abc%" - 传递
  • "abc" - 传递
  • "A" - 传递
  • "ABC" - 传递

4 个答案:

答案 0 :(得分:6)

如果这是您的验证范围,您最好使用Contains("%")的{​​{1}}和Length属性。

string

使用单个正则表达式测试 总长度和其中的模式本身就很困难。如果return !value.Contains("%") || value.Length > 3; 位于固​​定位置(开头,结尾,开头的第二个字符等),那么它会更合适,但是原样,这不是一个需要解决的问题正常< / em>只有一个RegEx。

可以使用丑陋的RegEx来完成,使用一些外观,但该解决方案不可能在不同的RegEx实现中移植(例如,它可能不适用于客户端Javascript验证)。

答案 1 :(得分:3)

我认为这不需要Regex来解决,只需要一些字符串方法就可以了:

var valid = !input.Contains("%") || input.Length > 3;

如果您想使用Regex,请执行以下操作:

^([^%]+|.{4,})$

答案 2 :(得分:1)

在c#中尝试以下表达式:

@"^((?=(?>.*?[^%]){3,}).*|[^%]+)$"

匹配示例中描述的内容:

  • "%" - 失败
  • "%12" - 失败
  • "%123" - 传递
  • "%1234" - 传递
  • "12%3" - 传递
  • "abc%" - 传递
  • "abc" - 传递
  • "A" - 传递
  • "ABC" - 传递

在同一表达式中使用非捕获非原子组,以便在javascript中工作(地址Jay的问题):

@"^((?=(?:.*?[^%]){3,}).*|[^%]+)$"

答案 3 :(得分:1)

假设验证至少需要1个字符 -

 ^(?:[^%]+|.*[^%].*[^%].*[^%].*)$

与JonM相同(不知道如何删除它)。