我希望我的注册表能够接受集合中的字符[a-zA-Z0-9。\?!%,],除了确切的单词“未设置”外,也不接受。
成功比赛的例子:
category1
myCategory
Hello World!!!
notset
不成功的比赛示例:
{empty string}
not set
Not Set
NOT SET
<script>
我正在使用.NET框架。
谢谢!
答案 0 :(得分:9)
显然,您可以通过代码测试“未设置”。如果必须是正则表达式,则可以使用negative lookahead:
^(?!not set$)[a-zA-Z0-9.?!%, ]+$
C#代码示例如下:
Match m = Regex.Match(s, @"^(?!not set$)[a-zA-Z0-9.?!%, ]+$", RegexOptions.IgnoreCase);
if (m.Success)
{
// all is well
}
如果您希望匹配不区分大小写(即“未设置”无效,但“未设置”有效),请使用:
Match m = Regex.Match(s, @"^(?!Not Set$)[a-zA-Z0-9.?!%, ]+$");
答案 1 :(得分:2)
这可能有效^(?i:(?!not set)[a-z0-9.\\?!%, ])+$
(未经测试)
修改强>
Didn't work for me. – Bob 4 hours ago
@Bob - 这是你的样本。
成功比赛的例子:
category1
myCategory
Hello World!!!
notset
不成功的比赛示例:
{empty string}
not set
Not Set
NOT SET
<script>
什么不起作用?
@samples = (
'category1',
'myCategory',
'Hello World!!!',
'notset',
'',
'not set',
'Not Set',
'NOT SET',
'<script>'
);
for (@samples) {
print "'$_'";
if (/^(?i:(?!not set)[a-z0-9.\\?!%, ])+$/) {
print " - yes matches\n";
}
else {
print " - no\n";
}
}
输出:
'category1
' - 是匹配
'myCategory
' - 是匹配
'Hello World!!!
' - 是匹配
'notset
' - 是匹配
'' - 没有
'not set
' - 没有
'Not Set
' - 没有
'NOT SET
' - 没有
'<script>
' - 没有
答案 2 :(得分:1)
您可以尝试以下代码:
static void Main(string[] args)
{
string str = "NOT SET";
if (str.ToLower().Equals("not set"))
{
// Do Something
}
else
{
String pattern = @"^[a-z0-9.\?!%,]+$";
Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
if (regex.IsMatch(str))
{
// Do Something
}
}
}
答案 3 :(得分:0)
我最终使用
^(?![nN][oO][tT] [sS][eE][tT]$)[a-zA-Z0-9.?!%, ]+$
在我的.net验证器和不显眼的javascript中使用(?i :)时,我注意到我的客户端验证被禁用了。