CommEntityHelpAgge.hpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #ifndef RVC_MOD_COMM_ENTITY_HELP_AGGERATE_HPP_
  2. #define RVC_MOD_COMM_ENTITY_HELP_AGGERATE_HPP_
  3. #include <string>
  4. #include <regex.h>
  5. #include "SimpleString.h"
  6. namespace SP
  7. {
  8. namespace Module
  9. {
  10. namespace Ulitily
  11. {
  12. bool IsValidUrl(const CSimpleStringA& value)
  13. {
  14. if (value.IsNullOrEmpty()) {
  15. return false;
  16. } else {
  17. std::string strUrl = SP::Utility::ToLower(value.GetData());
  18. regex_t reg;
  19. CSimpleStringA pattern = "^((https|http)://)";
  20. pattern += "(([0-9a-z_!~*\\'().&=+$%-]+: )?[0-9a-z_!~*\\'().&=+$%-]+@)?";
  21. pattern += "(([0-9]{1,3}\\.){3}[0-9]{1,3}";
  22. pattern += "|";
  23. pattern += "([0-9a-z_!~*\\'()-]+\\.)*";
  24. pattern += "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\\.";
  25. pattern += "[a-z]{2,6})";
  26. pattern += "(:[0-9]{1,4})?";
  27. pattern += "((/?)|";
  28. pattern += "(/[0-9a-z_!~*\\'().;?:@&=+$,%#-]+)+/?)$";
  29. int ret = regcomp(&reg, pattern, REG_EXTENDED | REG_NOSUB);
  30. if (ret) {
  31. char ebuff[256];
  32. regerror(ret, &reg, ebuff, 256);
  33. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("regex failed: %s", ebuff);
  34. return false;
  35. }
  36. ret = regexec(&reg, strUrl.c_str(), 0, NULL, 0);
  37. if (0 == ret) {
  38. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("correct url format: %s", strUrl.c_str());
  39. return true;
  40. } else {
  41. char ebuff[256];
  42. regerror(ret, &reg, ebuff, 256);
  43. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("%s not match: %s", strUrl.c_str(), ebuff);
  44. return false;
  45. }
  46. }
  47. }
  48. bool IsNum(const std::string& value)
  49. {
  50. if (value.empty()) {
  51. return false;
  52. }
  53. regex_t reg;
  54. const std::string pattern = "^[0-9]+$";
  55. int ret = regcomp(&reg, pattern.c_str(), REG_EXTENDED | REG_NOSUB);
  56. if (ret) {
  57. char ebuff[256];
  58. regerror(ret, &reg, ebuff, 256);
  59. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("regex failed: %s", ebuff);
  60. return false;
  61. }
  62. ret = regexec(&reg, value.c_str(), 0, NULL, 0);
  63. if (0 == ret) {
  64. return true;
  65. } else {
  66. char ebuff[256];
  67. regerror(ret, &reg, ebuff, 256);
  68. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("%s not match: %s", value.c_str(), ebuff);
  69. return false;
  70. }
  71. }
  72. bool CheckIPv4(const std::string& value)
  73. {
  74. if (value.empty()) {
  75. return false;
  76. }
  77. std::vector<std::string> elems = SP::Utility::Split(value, '.');
  78. if (elems.size() != 4) {
  79. return false;
  80. }
  81. for (int i = 0; i < 4; i++) {
  82. if (!IsNum(elems[i])) {
  83. return false;
  84. }
  85. if (elems[i].find(' ') != std::string::npos) {
  86. return false;
  87. }
  88. if ((elems[i].find('0') == 0) && (elems[i].length() != 1)) {
  89. return false;
  90. }
  91. }
  92. if ((stoi(elems[0]) < 0 || stoi(elems[0]) > 255) ||
  93. (stoi(elems[1]) < 0 || stoi(elems[1]) > 255) ||
  94. (stoi(elems[2]) < 0 || stoi(elems[2]) > 255) ||
  95. (stoi(elems[3]) < 0 || stoi(elems[3]) > 255)) {
  96. return false;
  97. }
  98. return true;
  99. }
  100. }
  101. }
  102. }
  103. #endif //RVC_MOD_COMM_ENTITY_HELP_AGGERATE_HPP_