正则表达式的Java输入验证问题

正则表达式的Java输入验证问题,java,regex,Java,Regex,以下代码适用于学生注册申请。 出于某种原因,下面代码中首先显示的两个验证不允许将数据输入数据库,然后在从主活动页面登录时获取数据 没有这两行代码,应用程序就可以完美地工作。 有人能告诉我这个问题吗 问题 //issue if (!uname.getText().toString().matches("[c|C][0-9]{7}")) {uname.setError("Incorrect ID 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");}
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

密码的正确格式为:

  • 数字必须至少出现一次
  • 小写字母必须至少出现一次
  • 大写字母必须至少出现一次
  • 特殊字符必须至少出现一次
  • 整个字符串中不允许空白
  • 什么都行,至少八个地方

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

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和验证器。

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

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和验证程序。

对于您的用户名,可以像这样使用:
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);
}

对于您的用户名,可以像这样使用:
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);
}

正确的id和密码格式是什么?请描述它,以便我们可以更正常规表达式输入内容是什么?@AshkanMobayenKhiabani编辑到question@ScaryWombat编辑成问题的
[c | c]
应该是
[cC]
,否则那些正则表达式就可以了;正确的输入不应该失败。正确的id和密码格式是什么?请描述它,以便我们可以更正常规表达式输入内容是什么?@AshkanMobayenKhiabani编辑到question@ScaryWombat编辑成问题的
[c | c]
应该是
[cC]
,否则那些正则表达式就可以了;他们不应该在正确的输入上失败。用户名和电子邮件对我都有效,但我正在努力使用密码,您显示的正则表达式进行了哪些验证?用户名和电子邮件对我都有效,但我正在努力使用密码,您显示的正则表达式进行了哪些验证?