【问题标题】:Regular expression string in javajava中的正则表达式字符串
【发布时间】:2015-05-29 17:49:16
【问题描述】:

我想解释一下关于从客户端提交到服务器的命令字符串的问题。通过这个特定的命令,我必须登录到服务器管理的数据库。根据项目的指导方针,命令的格式是:login@username;password。字符串通过套接字发送到服务器。用户插入他的凭据,这些凭据被发送到服务器,并将它们放入命令中。服务器必须从命令中分离出用户和密码,并且必须在数据库中检查用户是否已经存在。这是我的问题,因为用户和密码都可以存在; (分隔符的相同字符),我不明白(服务器端)如何从命令中划分用户和 psw,以便用户和 psw 与插入客户端的用户和 psw 相同。

你有什么想法吗?我正在考虑使用正则表达式,这是正确的方法吗?

【问题讨论】:

  • 如果用户名和密码也可以包含一个或多个分号,那么这是不可能的。服务器应该如何知道哪个分号是分隔符,哪些是用户名和/或密码的一部分?正则表达式不会为您解决这个问题。

标签: java regex string special-characters


【解决方案1】:

我只是将字符串拆分成这样的用户/密码字符串:

String userPass = "User;Pass";
String[] parts = userPass.split(";");
String user = parts[0];
String pass = parts[1];

【讨论】:

  • 如果用户名和/或密码包含一个或多个分号怎么办,正如安东尼奥在他的问题中提到的那样?
  • 是的,我没看到他提到过。编辑:那么这样的最佳实践是什么?使用异常异常的东西拆分用户/通行证? (例如,“;3~a45n”)
【解决方案2】:

如果你真的必须通过包含在两个子字符串中的分隔符来拆分字符串,则无法确保始终正确拆分字符串!

我认为您可以使用 unicode unit separator character 0x001F 安全地分隔字符串,因为用户在输入这样的字符时会遇到一些困难! 但根据您的应用程序和字符串处理,这也可能会造成损坏,因为存在一些与不兼容有关的问题(例如xml 1.0 doesn't support it at all)。

否则,如果只有一个子字符串或没有一个子字符串可能包含这样的字符,您可以轻松地使用已经提供的方法之一来拆分字符串并安全地提取数据。

【讨论】:

    【解决方案3】:

    这仅在用户/密码不包含@ 或; 时有效

        String loginStr = "login@User;Password";
    
        String []splittedLogin = loginStr.split("@");
    
        String []loginCredentials = splittedLogin[1].split(";");
    
        String user = loginCredentials[0];
        String password = loginCredentials[1];
    
        System.out.println(user);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      相关资源
      最近更新 更多