我有一個文本框,用戶可以輸入正則表達式字符串,然後用作正則表達式匹配模式。是否有語法驗證正則表達式?
我想知道是否有方法來驗證輸入的語法? 我如何知道它是否有效正則表達式模式?
我不希望用戶能夠輸入任何東西,但只是有效的正則表達式模式。
謝謝!
我有一個文本框,用戶可以輸入正則表達式字符串,然後用作正則表達式匹配模式。是否有語法驗證正則表達式?
我想知道是否有方法來驗證輸入的語法? 我如何知道它是否有效正則表達式模式?
我不希望用戶能夠輸入任何東西,但只是有效的正則表達式模式。
謝謝!
您可以使用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