请帮助正则表达式。我正在验证一个字符串。该值不应仅包含%,如果有%,则长度应超过3个字符,包括%。 %可以是字符串中的任何位置(包含点)。
我能想出来。只有%在字符串中时才会发生此验证。如果没有%,则无需验证。
@"^[a-zA-Z0-9'.]*%"; //{3,}$";
谢谢,Naveen
示例:
"%"
- 失败"%12"
- 失败"%123"
- 传递"%1234"
- 传递"12%3"
- 传递"abc%"
- 传递"abc"
- 传递"A"
- 传递"ABC"
- 传递答案 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相同(不知道如何删除它)。