我有一个文本框,用户可以输入正则表达式字符串,然后用作正则表达式匹配模式。是否有语法验证正则表达式?
我想知道是否有方法来验证输入的语法? 我如何知道它是否有效正则表达式模式?
我不希望用户能够输入任何东西,但只是有效的正则表达式模式。
谢谢!
我有一个文本框,用户可以输入正则表达式字符串,然后用作正则表达式匹配模式。是否有语法验证正则表达式?
我想知道是否有方法来验证输入的语法? 我如何知道它是否有效正则表达式模式?
我不希望用户能够输入任何东西,但只是有效的正则表达式模式。
谢谢!
您可以使用try和catch语句来测试其输入是否损坏。
public bool isValidRegex(string input){
bool ret;
ret = true;
try{
new Regex(input);
}
catch (ArgumentException){
ret = false;
}
return ret;
}
只需用用户输入创建一个新的Regex
实例。
如果输入无效,则会发生ArgumentException
。
编辑:由于其他答案的代码在我看来是不必要的复杂,这里是我的看法。
bool IsValidRegex(string input) {
try {
new Regex(input);
return true;
}
catch (ArgumentException) {
return false;
}
}
然而,我会不使用此代码,因为要构建它的情况下正则表达式两次:第一次测试的有效性,再后来实际使用它。 请勿这样做。相反,使用以下命令:
Regex TryParseRegex(string input) {
try {
return new Regex(input);
}
catch (ArgumentException) {
return null;
}
}
现在你会得到无效的正则表达式null
返回值。作为第三种替代方法,使用.NET TryXxx
模式和out
参数的方法相同。尽管如此,我发现这些方法设计的很糟糕。如果第一个.NET版本有Nullable
s,他们可能会看起来像上面的方法。所以用你自己的判断。
bool TryParseRegex(string input, out Regex regex) {
try {
regex = new Regex(input);
return true;
}
catch (ArgumentException) {
return false;
}
}
@KonradRudolph:是的,我认为你是对的。先前的评论已删除 – npinti