#include<regex>
bool IsValidRtspUrlWithoutUser(const char *rtsp)
{
std::regex regExpress1("^rtsp://\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}:\\d{1,5}/[^\\s]+");
std::regex regExpress2("^rtsp://\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}/[^\\s]+");
return std::regex_search(rtsp, regExpress1) || std::regex_search(rtsp, regExpress2);
}
bool IsValidRtspUrlWithUser(const char *rtsp)
{
std::regex regExpress1("^rtsp://\\w{1,20}:\\w{1,20}@\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}:\\d{1,5}/[^\\s]+");
std::regex regExpress2("^rtsp://\\w{1,20}:\\w{1,20}@\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}/[^\\s]+");
return std::regex_search(rtsp, regExpress1) || std::regex_search(rtsp, regExpress2);
}
bool IsValidRtspUrl(const char *rtsp)
{
return IsValidRtspUrlWithUser(rtsp) || IsValidRtspUrlWithoutUser(rtsp);
}
#define TEST_FUNC(fun, param, expect) { if(expect != ##fun(param)) bPassed &= false; }
int main(int argc, char** argv)
{
bool bPassed = true;
char *pUrl = "rtsp://192.168.0.45/Streaming/channels/101";
TEST_FUNC(IsValidRtspUrlWithoutUser, pUrl, true);
TEST_FUNC(IsValidRtspUrlWithUser, pUrl, false);
TEST_FUNC(IsValidRtspUrl, pUrl, true);
pUrl = "rtsp://admin:admin12345@192.168.0.45/Streaming/channels/101";
TEST_FUNC(IsValidRtspUrlWithoutUser, pUrl, false);
TEST_FUNC(IsValidRtspUrlWithUser, pUrl, true);
TEST_FUNC(IsValidRtspUrl, pUrl, true);
pUrl = "rtsp://admin:admin12345@192.168.0.45:554/Streaming/channels/101";
TEST_FUNC(IsValidRtspUrlWithoutUser, pUrl, false);
TEST_FUNC(IsValidRtspUrlWithUser, pUrl, true);
TEST_FUNC(IsValidRtspUrl, pUrl, true);
pUrl = "rtsp://192.168.0.45:554/Streaming/channels/101";
TEST_FUNC(IsValidRtspUrlWithoutUser, pUrl, true);
TEST_FUNC(IsValidRtspUrlWithUser, pUrl, false);
TEST_FUNC(IsValidRtspUrl, pUrl, true);
pUrl = " rtsp://192.168.0.45:554/Streaming/channels/101";
TEST_FUNC(IsValidRtspUrlWithoutUser, pUrl, false);
TEST_FUNC(IsValidRtspUrlWithUser, pUrl, false);
TEST_FUNC(IsValidRtspUrl, pUrl, false);
pUrl = "rtsp://192.168.0.45/";
TEST_FUNC(IsValidRtspUrlWithoutUser, pUrl, false);
TEST_FUNC(IsValidRtspUrlWithUser, pUrl, false);
TEST_FUNC(IsValidRtspUrl, pUrl, false);
pUrl = "rtsp://192.168.0.45";
TEST_FUNC(IsValidRtspUrlWithoutUser, pUrl, false);
TEST_FUNC(IsValidRtspUrlWithUser, pUrl, false);
TEST_FUNC(IsValidRtspUrl, pUrl, false);
pUrl = "192.168.0.45";
TEST_FUNC(IsValidRtspUrlWithoutUser, pUrl, false);
TEST_FUNC(IsValidRtspUrlWithUser, pUrl, false);
TEST_FUNC(IsValidRtspUrl, pUrl, false);
if (bPassed)
{
puts("test passed");
}
else
{
puts("test failed");
}
getchar();
return 0;
}
- 以上代码只是匹配了链接格式,并没有对IP地址进行有效匹配,如需要对IP地址部分进行更精确的匹配,需要将正则表达式中匹配IP的部分
\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}
替换为([0-9]|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.([0-9]|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.([0-9]|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.([0-9]|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])
。