Prechádzať zdrojové kódy

add: string库添加startsWith和endsWith方法

Wendal Chen 4 rokov pred
rodič
commit
40cd5ab7cb
2 zmenil súbory, kde vykonal 66 pridanie a 0 odobranie
  1. 5 0
      lua/src/lstrlib.c
  2. 61 0
      lua/src/lstrlib_exts.c

+ 5 - 0
lua/src/lstrlib.c

@@ -1543,6 +1543,8 @@ int l_str_toValue (lua_State *L);
 int l_str_urlEncode (lua_State *L);
 int l_str_toBase64(lua_State *L);
 int l_str_fromBase64(lua_State *L);
+int l_str_startsWith(lua_State *L);
+int l_str_endsWith(lua_State *L);
 //-----------------------------------------------------------
 
 #include "rotable.h"
@@ -1576,6 +1578,9 @@ static const rotable_Reg strlib[] = {
   {"fromBase64", l_str_fromBase64, 0},
   {"toBase64", l_str_toBase64, 0},
 
+  {"startsWith", l_str_startsWith, 0},
+  {"endsWith", l_str_endsWith, 0},
+
   //{"urlDecode", str_urlDecode},
   //-----------------------------
   {NULL, NULL, 0}

+ 61 - 0
lua/src/lstrlib_exts.c

@@ -476,6 +476,7 @@ int l_str_toBase64(lua_State *L) {
   lua_pushstring(L, "");
   return 1;
 }
+
 /*
 将字符串进行base64解码
 @api string.fromBase64(str)
@@ -501,3 +502,63 @@ int l_str_fromBase64(lua_State *L) {
   lua_pushstring(L, "");
   return 1;
 }
+
+/*
+判断字符串前缀
+@api string.startsWith(str, prefix)
+@string 需要检查的字符串
+@string 前缀字符串
+@return bool 真为true, 假为false
+@usage
+local str = "abc"
+log.info("str", str:startsWith("a"))
+log.info("str", str:startsWith("b"))
+*/
+int l_str_startsWith(lua_State *L) {
+  size_t str_len = 0;
+  size_t prefix_len = 0;
+  const char* str = luaL_checklstring(L, 1, &str_len);
+  const char* prefix = luaL_checklstring(L, 2, &prefix_len);
+
+  if (str_len < prefix_len) {
+    lua_pushboolean(L, 0);
+  }
+  else if (memcmp(str, prefix, prefix_len) == 0) {
+    lua_pushboolean(L, 1);
+  }
+  else {
+    lua_pushboolean(L, 0);
+  }
+  return 1;
+}
+
+/*
+判断字符串后缀
+@api string.startsWith(str, suffix)
+@string 需要检查的字符串
+@string 后缀字符串
+@return bool 真为true, 假为false
+@usage
+local str = "abc"
+log.info("str", str:endsWith("c"))
+log.info("str", str:endsWith("b"))
+*/
+int l_str_endsWith(lua_State *L) {
+  size_t str_len = 0;
+  size_t suffix_len = 0;
+  const char* str = luaL_checklstring(L, 1, &str_len);
+  const char* suffix = luaL_checklstring(L, 2, &suffix_len);
+
+  LLOGD("%s %d : %s %d", str, str_len, suffix, suffix_len);
+
+  if (str_len < suffix_len) {
+    lua_pushboolean(L, 0);
+  }
+  else if (memcmp(str + (str_len - suffix_len), suffix, suffix_len) == 0) {
+    lua_pushboolean(L, 1);
+  }
+  else {
+    lua_pushboolean(L, 0);
+  }
+  return 1;
+}