正则表达式

时间:2016-03-30 00:19:17

标签: java regex

以下代码适用于学生注册申请。 出于某种原因,首先从下面的代码中显示的两个验证不允许数据输入到数据库中,然后在从主活动页面登录时获取。

如果没有这两行,应用程序就能完美运行。 有人可以告诉我这个问题吗?

问题

            //issue
            if (!uname.getText().toString().matches("[c|C][0-9]{7}"))
            {uname.setError("Incorrect ID Format");}

            //issue
            if (!pass1.getText().toString().matches("^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{8,}$"))
            {pass1.setError("Incorrect Password Format");}

SignUp.Java

package com.example.oliver.beckettreg;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View; 
import android.widet.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class SignUp extends Activity {

DatabaseHelper helper = new DatabaseHelper(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.signup);
}

public void onSignUpClick(View v)
{
    if(v.getId()== R.id.Bsignupbutton)
    {


        EditText name = (EditText)findViewById(R.id.TFname);
        EditText email = (EditText)findViewById(R.id.TFemail);
        EditText uname = (EditText)findViewById(R.id.TFuname);
        EditText pass1 = (EditText)findViewById(R.id.TFpass1);
        EditText pass2 = (EditText)findViewById(R.id.TFpass2);


        String namestr = name.getText().toString();
        String emailstr = email.getText().toString();
        String unamestr = uname.getText().toString();
        String pass1str = pass1.getText().toString();
        String pass2str = pass2.getText().toString();


        if(!pass1str.equals(pass2str))


        {
            //popup msg
            Toast pass = Toast.makeText(SignUp.this , "Passwords don't match!" , Toast.LENGTH_SHORT);
            pass.show();


        }
        else
        {

            if (name.getText().toString().length() == 0)
        {name.setError("Name Required");}

            if (!email.getText().toString().matches("[a-z]\\.[a-z]*[0-9]*@student\\.leedsbeckett\\.ac\\.uk"))
            {email.setError("Incorrect Email Format");}

            //issue
            if (!uname.getText().toString().matches("[c|C][0-9]{7}"))
            {uname.setError("Incorrect ID Format");}
            //issue
            if (!pass1.getText().toString().matches("^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{8,}$"))
            {pass1.setError("Incorrect Password Format");}

            else{
            //insert the details in database
            Contact c = new Contact();
            c.setName(namestr);
            c.setEmail(emailstr);
            c.setUname(unamestr);
            c.setPass(pass1str);

            helper.insertContact(c);


                Toast pass = Toast.makeText(SignUp.this , "User Registered" , Toast.LENGTH_SHORT);
                pass.show();

        }

        }

    }


    }

public void onButtonClick(View v) {

    if (v.getId() == R.id.Blogin2) {
        Intent i = new Intent(SignUp.this, com.example.oliver.beckettreg.MainActivity.class);
        startActivity(i);

    }
}
}

电子邮件的格式正确 a.aaaaaa8234@leedsbeckett.ac.uk

uname的格式正确 c3400554

密码的正确格式为:

  • 数字必须至少出现一次
  • 小写字母必须至少出现一次
  • 大写字母必须至少出现一次
  • 特殊字符必须至少出现一次
  • 整个字符串中不允许有空格
  • 任何事情,至少八个地方

2 个答案:

答案 0 :(得分:1)

如果您将正则表达式代码放入其自己的类中,您可以轻松地对其进行测试,以确保在用户界面代码的上下文中使用它之前它可以正常工作。

class Validator {

    public boolean isValidUserName(String username) {
        return username.matches("[c|C][0-9]{7}");
    }
}

然后进行单元测试:

class ValidatorTest {

    @Test
    testUsernameValidator() {
        String username = "someName";
        Validator validator = new Validator();
        Assert.assertTrue(validator.isValidUsername(username));
    }
}

这将使您无需在运行时测试UI和验证器。

答案 1 :(得分:1)

对于您的用户名,请使用它:uname.getText().toString().matches(/[c|C][0-9]{7}/)

对于电子邮件,这是一个经典之作:

function validateEmail(email) {
    var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return re.test(email);
}

来自:Validate email address in JavaScript?

密码:

  function checkPassword(pass)
  {
    var re = /(?=.*[\d])(?=.*[a-z])(?=.*[A-Z]).{8,}/;
    return re.test(pass);
  }