Can anyone think of anything wrong with this check for a valid SQL Server Like expression? I guess maybe the last group is redundant as it is covered by the third group. Anyway - suggestions or improvements welcome.
^(\S*%\S*|\S*_\S*|\S*\[\S+\]\S*|\S*\[^\S+\]\S*)$
I'm referencing this as my guide: Microsoft Docs for SQL Server LIKE
Here are the tests I've written:
[TestMethod]
public void SqlLikeIsValidSqlLikeTest()
{
Assert.IsTrue("123%456".IsValidSqlLike());
Assert.IsTrue("%123456".IsValidSqlLike());
Assert.IsTrue("123456%".IsValidSqlLike());
Assert.IsTrue("123_456".IsValidSqlLike());
Assert.IsTrue("_123456".IsValidSqlLike());
Assert.IsTrue("123456_".IsValidSqlLike());
Assert.IsTrue("1_23%456".IsValidSqlLike());
Assert.IsTrue("123%45_6".IsValidSqlLike());
Assert.IsTrue("123%456".IsValidSqlLike());
Assert.IsTrue("12[34]56".IsValidSqlLike());
Assert.IsTrue("123[1-2]456".IsValidSqlLike());
Assert.IsTrue("123[1234]456".IsValidSqlLike());
Assert.IsTrue("123[^1234]456".IsValidSqlLike());
Assert.IsTrue("[1234]456".IsValidSqlLike());
Assert.IsTrue("123[1234]".IsValidSqlLike());
Assert.IsTrue("123[^1-4]456".IsValidSqlLike());
Assert.IsTrue("[^1-4]456".IsValidSqlLike());
Assert.IsTrue("123[^1-4]".IsValidSqlLike());
Assert.IsTrue("12[3-]56".IsValidSqlLike());
Assert.IsTrue("12[^]56".IsValidSqlLike());
}
[TestMethod]
public void SqlLikeIsNotValidSqlLikeTest()
{
Assert.IsFalse("123456".IsValidSqlLike());
Assert.IsFalse("12[3456".IsValidSqlLike());
Assert.IsFalse("1234]56".IsValidSqlLike());
Assert.IsFalse("12]34[56".IsValidSqlLike());
Assert.IsFalse("]34[56".IsValidSqlLike());
Assert.IsFalse("34[^56".IsValidSqlLike());
Assert.IsFalse("12]34[".IsValidSqlLike());
Assert.IsFalse("12[]56".IsValidSqlLike());
}