Erlang 如何将ejabberd JID分解为各个部分

Erlang 如何将ejabberd JID分解为各个部分,erlang,ejabberd,Erlang,Ejabberd,Im编写和ejabberd模块,用于检查用户是否存在以执行某些操作,Im使用ejabberd_auth_external:is_user_exists(“用户”、“主机”)来实现这一点,但是我没有用户,而是以USER@HOST/资源,,有没有办法将用户从该字符串中解救出来您可以使用带有分隔符“@”的函数字符串:tokens/2,返回列表的第一个元素将是用户名: JID = "user.name@host/resource". [User|_] = string:tokens(JID, "@").

Im编写和ejabberd模块,用于检查用户是否存在以执行某些操作,Im使用ejabberd_auth_external:is_user_exists(“用户”、“主机”)来实现这一点,但是我没有用户,而是以USER@HOST/资源,,有没有办法将用户从该字符串中解救出来

您可以使用带有分隔符“@”的函数字符串:tokens/2,返回列表的第一个元素将是用户名:

JID = "user.name@host/resource".
[User|_] = string:tokens(JID, "@").

您可以使用带有分隔符“@”的函数字符串:tokens/2,返回列表的第一个元素将是用户名:

JID = "user.name@host/resource".
[User|_] = string:tokens(JID, "@").

ejabberd中执行此操作的典型方法是使用
jlib:string_to_jid/1
函数:

-include("jlib.hrl").
...
case jlib:string_to_jid(String) of
    #jid{luser = LUser, lserver = LServer} ->
        ejabberd_auth:is_user_exists(LUser, LServer);
    error ->
        false
end.

另外,不要直接使用来自
ejabberd_auth_external
模块的函数。改用
ejabberd\u auth

ejabberd中的典型方法是使用
jlib:string\u to\u jid/1
函数:

-include("jlib.hrl").
...
case jlib:string_to_jid(String) of
    #jid{luser = LUser, lserver = LServer} ->
        ejabberd_auth:is_user_exists(LUser, LServer);
    error ->
        false
end.

另外,不要直接使用来自
ejabberd_auth_external
模块的函数。改用
ejabberd\u auth
编辑:在最近的ejabberd版本中,应改用jid:from\u string/1以避免编译警告。编辑:在最近的ejabberd版本中,应改用jid:from\u string/1以避免编译警告。