CommEntityHelpAgge.hpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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. Dbg("regex failed: %s", ebuff);
  34. return false;
  35. }
  36. //Dbg("pattern: %s", pattern.GetData());
  37. ret = regexec(&reg, strUrl.c_str(), 0, NULL, 0);
  38. if (0 == ret) {
  39. Dbg("correct url format: %s", strUrl.c_str());
  40. return true;
  41. } else {
  42. char ebuff[256];
  43. regerror(ret, &reg, ebuff, 256);
  44. Dbg("%s not match: %s", strUrl.c_str(), ebuff);
  45. return false;
  46. }
  47. }
  48. }
  49. bool IsNum(const std::string& value)
  50. {
  51. if (value.empty()) {
  52. return false;
  53. }
  54. regex_t reg;
  55. const std::string pattern = "^[0-9]+$";
  56. int ret = regcomp(&reg, pattern.c_str(), REG_EXTENDED | REG_NOSUB);
  57. if (ret) {
  58. char ebuff[256];
  59. regerror(ret, &reg, ebuff, 256);
  60. Dbg("regex failed: %s", ebuff);
  61. return false;
  62. }
  63. ret = regexec(&reg, value.c_str(), 0, NULL, 0);
  64. if (0 == ret) {
  65. return true;
  66. } else {
  67. char ebuff[256];
  68. regerror(ret, &reg, ebuff, 256);
  69. Dbg("%s not match: %s", value.c_str(), ebuff);
  70. return false;
  71. }
  72. }
  73. bool CheckIPv4(const std::string& value)
  74. {
  75. if (value.empty()) {
  76. return false;
  77. }
  78. std::vector<std::string> elems = SP::Utility::Split(value, '.');
  79. if (elems.size() != 4) {
  80. return false;
  81. }
  82. for (int i = 0; i < 4; i++) {
  83. if (!IsNum(elems[i])) {
  84. return false;
  85. }
  86. if (elems[i].find(' ') != std::string::npos) {
  87. return false;
  88. }
  89. if ((elems[i].find('0') == 0) && (elems[i].length() != 1)) {
  90. return false;
  91. }
  92. }
  93. if ((stoi(elems[0]) < 0 || stoi(elems[0]) > 255) ||
  94. (stoi(elems[1]) < 0 || stoi(elems[1]) > 255) ||
  95. (stoi(elems[2]) < 0 || stoi(elems[2]) > 255) ||
  96. (stoi(elems[3]) < 0 || stoi(elems[3]) > 255)) {
  97. return false;
  98. }
  99. return true;
  100. }
  101. }
  102. }
  103. }
  104. #endif //RVC_MOD_COMM_ENTITY_HELP_AGGERATE_HPP_