【问题标题】:How should I validate an e-mail address?我应该如何验证电子邮件地址?
【发布时间】:2011-05-19 13:11:29
【问题描述】:

在 Android 中验证电子邮件地址(例如来自用户输入字段)的好技术是什么? org.apache.commons.validator.routines.EmailValidator 似乎不可用。是否有任何其他库已经包含在 Android 中,或者我必须使用 RegExp?

【问题讨论】:

  • 请参考这个,希望对你有帮助:stackoverflow.com/questions/12947620/…
  • @user2757064 这个问题应该对您链接的其他问题有所帮助。这个问题是在 3 年后提出的。 :)

标签: android email-validation


【解决方案1】:

另一个选项是从 API 级别 8 开始的内置 Patterns

public final static boolean isValidEmail(CharSequence target) {
  if (TextUtils.isEmpty(target)) {
    return false;
  } else {
    return android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
  }
}

Patterns viewable source

@AdamvandenHoven 的一条线解决方案:

public final static boolean isValidEmail(CharSequence target) {
  return !TextUtils.isEmpty(target) && android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
}

【讨论】:

  • +1 ,但我更喜欢将 (target == null) 替换为 TextUtils.isEmpty(target) :)
  • 这样的答案是我不喜欢将接受的答案显示在顶部而不是投票最多的答案的原因。
  • 将它简单地组合成一行是否更有意义(可读性): return !TextUtils.isEmpty(target) && android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches ();
  • @Houcine, true 但上面的方法返回布尔值,因此当它为 false 时我们没有该信息。无论如何,可以从函数内部敬酒或更新 ui(必须在 UI 线程中运行)。对于像我这样正在验证以编程方式获得的电子邮件并且没有任何用户交互的人,我们可以坚持使用“== null”,并且在大多数情况下可能会节省几个时钟周期。
  • 小心。此匹配器接受 email@111.222.333.44444 作为有效电子邮件
【解决方案2】:

K-9 邮件中使用下一个模式:

public static final Pattern EMAIL_ADDRESS_PATTERN = Pattern.compile(
          "[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" +
          "\\@" +
          "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" +
          "(" +
          "\\." +
          "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" +
          ")+"
      );

你可以使用函数

private boolean checkEmail(String email) {
        return EMAIL_ADDRESS_PATTERN.matcher(email).matches();
}

【讨论】:

  • 为什么不使用android.util.Patterns.EMAIL_ADDRESS
  • 因为它只存在于 API 级别 8
  • 这对我有很大帮助,感谢您为简单的答案 +1.. :)
  • 仅供参考:在字符类内部,元字符要少得多,并且连字符在放置在边框时会自动转义,您可以将第一类简化为 [a-zA-Z0-9+._%-],将其他类简化为 [a-zA-Z0-9-]
  • 这仅在电子邮件语法与电子邮件相同的情况下返回 true,我尝试从 @gmail.com 中删除 i,它将返回 true。 `@yaho.com 中相同。
【解决方案3】:

从 API 8 (android 2.2) 开始有一个模式:android.util.Patterns.EMAIL_ADDRESS http://developer.android.com/reference/android/util/Patterns.html

因此您可以使用它来验证 yourEmailString:

private boolean isValidEmail(String email) {
    Pattern pattern = Patterns.EMAIL_ADDRESS;
    return pattern.matcher(email).matches();
}

如果电子邮件有效,则返回 true

更新: 这个模式源代码是:

public static final Pattern EMAIL_ADDRESS
    = Pattern.compile(
        "[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" +
        "\\@" +
        "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" +
        "(" +
            "\\." +
            "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" +
        ")+"
    );

参考:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/util/Patterns.java

因此您可以自己构建它以兼容 API

【讨论】:

    【解决方案4】:

    我们现在有一个简单的电子邮件模式匹配器。

    Java:

     private static boolean isValidEmail(String email) {
            return !TextUtils.isEmpty(email) && android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
        }
    

    Kotlin 函数:

     private fun isValidEmail(email: String): Boolean {
            return !TextUtils.isEmpty(email) && Patterns.EMAIL_ADDRESS.matcher(email).matches()
        }
    

    Kotlin 扩展:

    fun String.isValidEmail() =
        !TextUtils.isEmpty(this) && Patterns.EMAIL_ADDRESS.matcher(this).matches()
    

    【讨论】:

      【解决方案5】:

      不要使用正则表达式。

      显然,以下是正确验证大多数符合RFC 2822 的电子邮件地址的正则表达式(并且仍然会在诸如“user@gmail.com.nospam”之类的事情上失败,org.apache 也是如此。 commons.validator.routines.EmailValidator)

      (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
      

      验证电子邮件的最简单方法可能是向提供的地址发送一封确认电子邮件,然后它会退回,然后它就无效了。

      如果您想执行一些基本检查,您可以检查它的格式是否为 *@*

      如果您有一些特定于业务逻辑的验证,那么您可以使用正则表达式来执行该验证,例如必须是 gmail.com 帐户之类的。

      【讨论】:

      • 我知道这个答案已经有两年的历史了,但是当我使用 regexr.com 尝试这个正则表达式时,它会验证 user@gmail.com.nospam,甚至更长的 tld,比如 .museum。我错过了什么吗?我不想通过未能验证他们的有效电子邮件地址来阻止我的任何用户,但这似乎对我能想到的任何事情都有效。
      • @Bob 验证服务器上的电子邮件地址.. 检查foursquare 应用程序是否相同
      • 我有点困惑,为什么你以“不要使用正则表达式”开始这个答案,然后继续提供正则表达式。
      • 请继续阅读。下面是一个更好的解决方案,它不使用正则表达式。
      • @Glen 。这是否适用于 Android 的 模式。 EMAIL_ADDRESS ? developer.android.com/reference/android/util/…
      【解决方案6】:

      使用简单的一行代码进行电子邮件验证

      public static boolean isValidEmail(CharSequence target) {
          return !TextUtils.isEmpty(target) && android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
      }
      

      使用...

      if (!isValidEmail(yourEdittext.getText().toString()) {
          Toast.makeText(context, "your email is not valid", 2000).show();
      }
      

      【讨论】:

        【解决方案7】:

        您可以像这样编写 Kotlin 扩展:

        fun String.isValidEmail() =
                isNotEmpty() && android.util.Patterns.EMAIL_ADDRESS.matcher(this).matches()
        

        然后这样称呼它:

        email.isValidEmail()
        

        【讨论】:

        • 谁是“模式”?
        • android.util.Patterns
        【解决方案8】:

        这是 Android Studio 的建议:

        public static boolean isEmailValid(String email) {
            return !(email == null || TextUtils.isEmpty(email)) && android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
        }
        

        【讨论】:

        • null 检查 email == null 是多余的,因为 TextUtils 在里面检查它
        • @VolodymyrKhodonovych 你是对的,但是空值检查是在 OR 状态下完成的,不这样做可能会在将电子邮件传递给 matcher() 方法时导致 NPE。
        【解决方案9】:

        您可以使用正则表达式来做到这一点。类似于以下内容。

        Pattern pattern = Pattern.compile(".+@.+\\.[a-z]+");
        
        String email = "xyz@xyzdomain.com";
        
        Matcher matcher = pattern.matcher(email);
        
        boolean matchFound = matcher.matches();
        

        注意:检查上面给出的正则表达式,不要照原样使用。

        【讨论】:

        【解决方案10】:

        使用 android:inputType="textEmailAddress" 如下:

               <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="email"
                android:inputType="textEmailAddress"
                android:id="@+id/email"
                />
        

        和:

               boolean isEmailValid(CharSequence email) {
                return android.util.Patterns.EMAIL_ADDRESS.matcher(email)
                        .matches();
              }
        

        【讨论】:

          【解决方案11】:

          android.util 包中有一个 Patterns 类,这在这里很有用。以下是我一直用于验证电子邮件和许多其他内容的方法

          private boolean isEmailValid(String email) {
              return !TextUtils.isEmpty(email) && Patterns.EMAIL_ADDRESS.matcher(email).matches();
          }
          

          【讨论】:

            【解决方案12】:

            使用扩展函数的最简单 Kotlin 解决方案:

            fun String.isEmailValid() =
                        Pattern.compile(
                                "[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" +
                                        "\\@" +
                                        "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" +
                                        "(" +
                                        "\\." +
                                        "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" +
                                        ")+"
                        ).matcher(this).matches()
            

            然后你可以像这样验证:

            "testemail6589@gmail.com".isEmailValid()
            

            如果您在 kotlin-multiplatform 中无法访问 Pattern,则等效:

            fun String.isValidEmail() = Regex(emailRegexStr).matches(this)
            

            【讨论】:

              【解决方案13】:

              在您要验证电子邮件 ID 的地方调用此方法。

              public static boolean isValid(String email)
              {
                 String expression = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
                 CharSequence inputStr = email;
                 Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
                 Matcher matcher = pattern.matcher(inputStr);
                 if (matcher.matches()) 
                 {
                    return true;
                 }
                 else{
                 return false;
                 }
              }
              

              【讨论】:

                【解决方案14】:

                对于一个电子邮件验证android提供一些InBuilt Pattern。但它只支持API 8级及以上

                这是使用该模式检查电子邮件验证的代码。

                  private boolean Email_Validate(String email) 
                  {
                    return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
                  }
                

                确保在执行此方法后,您应该检查如果此方法返回 true 则您允许保存电子邮件,如果此方法返回 false 则显示该电子邮件的消息是“无效的”。

                希望你能得到答案, 谢谢你。

                【讨论】:

                  【解决方案15】:

                  这是kotlin中使用扩展函数的最佳方式

                  fun String.isEmailValid(): Boolean {
                          return !TextUtils.isEmpty(this) && android.util.Patterns.EMAIL_ADDRESS.matcher(this).matches()
                      }
                  

                  【讨论】:

                    【解决方案16】:

                    我能否强烈建议您不要尝试“验证”电子邮件地址,您只会无缘无故地投入大量工作。

                    只要确保输入的内容不会破坏您自己的代码 - 例如没有可能导致异常的空格或非法字符。

                    其他任何事情都只会让您付出大量工作而获得最低回报...

                    【讨论】:

                    • 在处理订阅和付款时,这几乎不是有用的建议。如果有人忘记了他们的密码,我们必须有办法安全地重置他们的密码,以允许他们继续使用他们支付的服务。因此,有时我们最好确保他们为自己输入有效的电子邮件地址。
                    • 只是为了清楚我所说的-如果有人打算输入虚假/错误的地址-再多的验证也无法阻止他们..检查诸如空格之类的愚蠢错误,没有'@'等. 很好 - 检查其他任何东西都很好地“减少回报”......
                    • 识别虚假电子邮件的唯一方法是通过向该电子邮件 ID 发送电子邮件并检查您是否收到未送达的报告...
                    • 约翰,许多用户不会有意输入虚假/错误地址,但可能会不小心输入错误。因此,执行简单的检查可能非常有用,并且如 mindriot 的回答所示,工作量并不大。根据我的经验,大多数人都正确输入了他们的电子邮件地址,而少数无效的电子邮件最常见的原因似乎是无辜的拼写错误。
                    • 如果用户的电子邮件正常工作很重要,您可以发送一封确认电子邮件。其他都是废话。
                    【解决方案17】:

                    验证您的电子邮件地址格式。 Ex-virag@gmail.com

                    public boolean emailValidator(String email) 
                    {
                        Pattern pattern;
                        Matcher matcher;
                        final String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
                        pattern = Pattern.compile(EMAIL_PATTERN);
                        matcher = pattern.matcher(email);
                        return matcher.matches();
                    }
                    

                    【讨论】:

                      【解决方案18】:
                          public boolean isValidEmail(String email)
                      {
                          boolean isValidEmail = false;
                      
                          String emailExpression = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
                          CharSequence inputStr = email;
                      
                          Pattern pattern = Pattern.compile(emailExpression, Pattern.CASE_INSENSITIVE);
                          Matcher matcher = pattern.matcher(inputStr);
                          if (matcher.matches())
                          {
                              isValidEmail = true;
                          }
                          return isValidEmail;
                      }
                      

                      【讨论】:

                        【解决方案19】:

                        如果您使用 API 8 或更高版本,则可以使用现成的 Patterns 类来验证电子邮件。示例代码:

                        public final static boolean isValidEmail(CharSequence target) {
                            if (target == null) 
                                return false;
                        
                            return android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
                        }
                        

                        如果您甚至支持低于 8 的 API 级别,那么您可以简单地将 Patterns.java 文件复制到您的项目中并引用它。您可以从this link获取Patterns.java的源代码

                        【讨论】:

                          【解决方案20】:

                          这里是android.util.Patterns.EMAIL_ADDRESS

                          [a-zA-Z0-9+._\%-+]{1,256}\@[a-zA-Z0-9][a-zA-Z0-9-]{0,64}(. [a-zA-Z0-9][a-zA-Z0-9-]{0,25})+

                          String 将匹配它如果

                          Start by 1->256 character in (a-z, A-Z, 0-9, +, ., _, %, - , +)  
                          then 1 '@' character  
                          then 1 character in (a-z, A-Z, 0-9)  
                          then 0->64 character in (a-z, A-Z, 0-9, -)  
                          then **ONE OR MORE** 
                                   1 '.' character   
                              then 1 character in (a-z, A-Z, 0-9)   
                              then 0->25 character in (a-z, A-Z, 0-9, -)
                          

                          一些特殊的匹配电子邮件示例

                          a@b.c
                          a+@b-.c
                          a@b.c.d.e.f.g.h
                          

                          您可以根据自己的情况修改此模式,然后通过验证

                          fun isValidEmail(email: String): Boolean {
                              return Patterns.EMAIL_ADDRESS.matcher(email).matches()
                          }
                          

                          【讨论】:

                            【解决方案21】:

                            试试这个不能接受以数字开头的邮件地址的简单方法:

                            boolean checkEmailCorrect(String Email) {
                                if(signupEmail.length() == 0) {
                                    return false;
                                }
                            
                                String pttn = "^\\D.+@.+\\.[a-z]+";
                                Pattern p = Pattern.compile(pttn);
                                Matcher m = p.matcher(Email);
                            
                                if(m.matches()) {
                                    return true;
                                }
                            
                                return false;
                            }
                            

                            【讨论】:

                              【解决方案22】:

                              试试这个代码..它真的有效..

                                          if (!email
                                                  .matches("^[\\w-_\\.+]*[\\w-_\\.]\\@([\\w]+\\.)+[\\w]+[\\w]$"))
                                          {
                                              Toast.makeText(getApplicationContext(), "Email is invalid",
                                                      Toast.LENGTH_LONG).show();
                                              return;
                                          }
                              

                              【讨论】:

                                【解决方案23】:

                                以下是我使用的。但是它包含比普通电子邮件更多的字符,但这是我的要求。

                                public boolean isValidEmail(String inputString) {
                                    String  s ="^((?!.*?\.\.)[A-Za-z0-9\.\!\#\$\%\&\'*\+\-\/\=\?\^_`\{\|\}\~]+@[A-Za-z0-9]+[A-Za-z0-9\-\.]+\.[A-Za-z0-9\-\.]+[A-Za-z0-9]+)$";
                                    Pattern pattern = Pattern.compile(regex);
                                    Matcher matcher = pattern.matcher(inputString);
                                    return matcher.matches();
                                }
                                

                                这个问题的答案:- Requirement to validate an e-mail address with given points

                                说明-

                                1. (?!.*?..) "Negative Lookhead" 否定 2 个连续的点。
                                2. [A-Za-z0-9.!#\$\%\&\'*+-/\=\?\^_`{\|}\~]+ 至少一个 定义的字符。 (“\”用于转义)。
                                3. @ 可能只有一个“@”。
                                4. [A-Za-z0-9]+ 然后定义了至少一个字符。
                                5. [A-Za-z0-9-.]* 定义了零个或任何重复字符。
                                6. [A-Za-z0-9]+ 点后至少一个字符。

                                【讨论】:

                                  【解决方案24】:

                                  这里的关键是您要完全验证电子邮件地址。您不仅要检查它的语法正确性,还要检查电子邮件地址是否真实。

                                  两个明显的原因:真实用户经常错误输入他们的电子邮件地址,并且一些用户可能会输入虚假的电子邮件地址。因此,您要进行语法检查和存在检查。

                                  我在 Android 上找到的最佳方法是为此使用免费的Cloudmersive Validation API

                                  代码如下所示:

                                  ApiClient defaultClient = Configuration.getDefaultApiClient();
                                  
                                  // Configure API key authorization: Apikey
                                  ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
                                  Apikey.setApiKey("YOUR API KEY");
                                  
                                  EmailApi apiInstance = new EmailApi();
                                  String email = "email_example"; // String | Email address to validate, e.g. \"support@cloudmersive.com\". The input is a string so be sure to enclose it in double-quotes.
                                  try {
                                      FullEmailValidationResponse result = apiInstance.emailFullValidation(email);
                                      System.out.println(result);
                                  } catch (ApiException e) {
                                      System.err.println("Exception when calling EmailApi#emailFullValidation");
                                      e.printStackTrace();
                                  }
                                  

                                  我在我的所有应用程序中都使用了它,它很棒,因为我可以在进入时验证 UX 中的电子邮件地址。

                                  【讨论】:

                                    【解决方案25】:

                                    Kotlin 中的电子邮件验证:

                                    val email = etEmail.text.toString().trim() // get email from user
                                    
                                      if(isValidEmail(email)){ // call isValidEmail function and pass email in parameter
                                          // Your email ID is Valid
                                      }else{
                                          // Enter your valid email ID
                                      }
                                    

                                    此方法用于检查有效的电子邮件 ID 格式。

                                        fun isValidEmail(email: CharSequence): Boolean {
                                            var isValid = true
                                            val expression = "^[\\w.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$"
                                            val pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE)
                                            val matcher = pattern.matcher(email)
                                            if (!matcher.matches()) {
                                                isValid = false
                                            }
                                            return isValid
                                        }
                                    

                                    【讨论】:

                                    • matcher.matches() 返回一个布尔值,因此您可以直接返回它而无需将其存储在isValid
                                    • 是的,我们可以这样做。感谢您的建议
                                    【解决方案26】:

                                    请注意,大多数正则表达式对于国际域名 (IDN) 和 .mobi 或 .info 等新顶级域(如果您检查国家代码或 .org、.com、.gov 等)无效)。

                                    有效的检查应该将本地部分(在 at 符号之前)和域部分分开。您还应该考虑本地部分和域的最大长度(总共 255 个字符,包括 at 符号)。

                                    最好的方法是将地址转换为与 IDN 兼容的格式(如果需要)、验证本地部分 (RFC)、检查地址的长度和检查域的可用性(DNS MX 查找)或简单地发送电子邮件。

                                    【讨论】:

                                      【解决方案27】:

                                      Linkify 类有一些可能相关的非常有用的辅助方法,包括用于获取电话号码和电子邮件地址等的正则表达式:

                                      http://developer.android.com/reference/android/text/util/Linkify.html

                                      【讨论】:

                                        【解决方案28】:

                                        我使用了以下代码。这很有效。我希望这会对你有所帮助。

                                        if (validMail(yourEmailString)){
                                           //do your stuf
                                         }else{
                                         //email is not valid.
                                        }
                                        

                                        并使用以下方法。如果电子邮件有效,则返回 true。

                                            private boolean validMail(String yourEmailString) {
                                            Pattern emailPattern = Pattern.compile(".+@.+\\.[a-z]+");
                                            Matcher emailMatcher = emailPattern.matcher(emailstring);
                                            return emailMatcher.matches();
                                        }
                                        

                                        【讨论】:

                                          【解决方案29】:

                                          电子邮件是您的电子邮件。

                                          public boolean validateEmail(String email) {
                                          
                                              Pattern pattern;
                                              Matcher matcher;
                                              String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
                                              pattern = Pattern.compile(EMAIL_PATTERN);
                                              matcher = pattern.matcher(email);
                                              return matcher.matches();
                                          
                                              }
                                          

                                          【讨论】:

                                            【解决方案30】:

                                            对于正则表达式爱好者,我从现在开始发现的最好的(例如与 RFC 822 一致的)电子邮件模式如下(在 PHP 提供过滤器之前)。我想把它翻译成 Java 很容易——对于那些使用 API

                                            private static function email_regex_pattern() {
                                            // Source:  http://www.iamcal.com/publish/articles/php/parsing_email
                                            $qtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]';
                                            $dtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]';
                                            $atom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c'.
                                                '\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+';
                                            $quoted_pair = '\\x5c[\\x00-\\x7f]';
                                            $domain_literal = "\\x5b($dtext|$quoted_pair)*\\x5d";
                                            $quoted_string = "\\x22($qtext|$quoted_pair)*\\x22";
                                            $domain_ref = $atom;
                                            $sub_domain = "($domain_ref|$domain_literal)";
                                            $word = "($atom|$quoted_string)";
                                            $domain = "$sub_domain(\\x2e$sub_domain)*";
                                            $local_part = "$word(\\x2e$word)*";
                                            $pattern = "!^$local_part\\x40$domain$!";
                                            return $pattern ;
                                            }
                                            

                                            【讨论】:

                                              猜你喜欢
                                              • 1970-01-01
                                              • 1970-01-01
                                              • 2014-06-12
                                              • 1970-01-01
                                              • 1970-01-01
                                              • 2018-03-13
                                              相关资源
                                              最近更新 更多