【问题标题】:Email check gives error message even though email is valid即使电子邮件有效,电子邮件检查也会给出错误消息
【发布时间】:2014-05-15 00:53:32
【问题描述】:

我正在尝试验证编辑文本中的电子邮件。以下是我用于检查电子邮件模式的代码。即使输入的电子邮件格式有效,我的应用程序仍会返回错误消息。我似乎找不到问题。

public 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();
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_post_item_form);

    // Edit Text
    itemName = (EditText) findViewById(R.id.i_itemname);
    itemPrice = (EditText) findViewById(R.id.i_price);
    itemDesc = (EditText) findViewById(R.id.i_des);
    inputEmail = (EditText) findViewById(R.id.i_email);
    contact = (EditText) findViewById(R.id.i_contact);
    password = (EditText) findViewById(R.id.i_password);
    itemCat = (Spinner) findViewById(R.id.spinner1);


    category = itemCat.getSelectedItem().toString();
    postemail = inputEmail.getText().toString();

    // Create button
    Button btnCreateProduct = (Button) findViewById(R.id.submitpostitem);

    // button click event
    btnCreateProduct.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            category = itemCat.getSelectedItem().toString();
            if (itemName.length() < 2) {
                itemName.setError("Invalid item name");
                return;
            } else if (itemPrice.length() == 0) {
                itemPrice.setError("Invalid item price");
                return;
            } else if (!checkEmail(postemail)) {
                inputEmail.setError("Invalid email");
                return;
            } else if (contact.length() < 10 || contact.length() > 12) {
                contact.setError("Invalid contact");
                return;
            } else if (password.length() < 6) {
                password.setError("At least 6 characters long");
                return;
            } else if (category.equals("---")) {
                Toast.makeText(PostItemForm.this,
                        "Please choose a category", Toast.LENGTH_LONG)
                        .show();
                return;
            }

            // creating new product in background thread
            new CreateNewProduct().execute();
        }
    });
}

【问题讨论】:

  • 请记录错误日志....
  • 没有错误是错误日志。错误消息来自 setError 响应。

标签: android validation email


【解决方案1】:

尝试使用以下代码验证电子邮件地址:

android.util.Patterns.EMAIL_ADDRESS.matcher(YourString).matches();

所以checkEmail 必须是这样的:

private boolean checkEmail(String email) {
    if (TextUtils.isEmpty(email)) {
        return false;
    } else {
        return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
    }
}

你可以看到以下链接:

Email Address Validation in Android on EditText

How should I validate an e-mail address on Android?

【讨论】:

    【解决方案2】:

    尝试如下:

         Pattern m_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) {
           Matcher m_matcher = m_pattern.matcher(email.toString().trim());
           if (!m_matcher.matches()) 
                return true;
            else
           return false;
    }
    

    获取Button 内的EditText 的值,而不是onCreate。正如您在点击侦听器外部编写的行 postemail = inputEmail.getText().toString(); 一样,它将始终获得先前的值。

    只需在点击监听器中更改您的代码,如下所示。

      btnCreateProduct.setOnClickListener(new View.OnClickListener() {
    
        @Override
        public void onClick(View view) {
            category = itemCat.getSelectedItem().toString();
            postemail = inputEmail.getText().toString();
    
         if (itemName.length() < 2) {
                itemName.setError("Invalid item name");
                return;
            } else if (itemPrice.length() == 0) {
                itemPrice.setError("Invalid item price");
                return;
            } else if (!checkEmail(postemail)) {
                inputEmail.setError("Invalid email");
                return;
            } else if (contact.length() < 10 || contact.length() > 12) {
                contact.setError("Invalid contact");
                return;
            } else if (password.length() < 6) {
                password.setError("At least 6 characters long");
                return;
            } else if (category.equals("---")) {
                Toast.makeText(PostItemForm.this,
                        "Please choose a category", Toast.LENGTH_LONG)
                        .show();
                return;
            }
    
            // creating new product in background thread
            new CreateNewProduct().execute();
        }
    });
    

    【讨论】:

    • 同样的问题,从我的 seterror 消息中收到无效的电子邮件
    • 我认为你需要改变你的正则表达式。您要验证哪个电子邮件地址?
    • 尝试在按钮点击事件中获取EditText 的值,而不是在它之外。
    【解决方案3】:

    试试这个....

    将此代码粘贴到 Oncreate 方法之前

     public static boolean isValidEmail(String str) {
        boolean isValid = false;
        if (Build.VERSION.SDK_INT >= 8) {
            return android.util.Patterns.EMAIL_ADDRESS.matcher(str).matches();
        }
        String expression = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
        CharSequence inputStr = str;
        Pattern pattern = Pattern.compile(expression);
        Matcher matcher = pattern.matcher(inputStr);
        if (matcher.matches()) {
            isValid = true;
        }
        return isValid;
    }
    

    并在编辑文本后检查此条件

         if (!isValidEmail( inputEmail.getText().toString().trim())) {
         inputEmail.setError("Invalid Email ID");
    

    【讨论】:

      猜你喜欢
      • 2018-05-18
      • 2021-02-06
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 2023-03-06
      • 2019-03-03
      • 1970-01-01
      • 2021-08-22
      相关资源
      最近更新 更多