以下代码适用于学生注册申请。 出于某种原因,首先从下面的代码中显示的两个验证不允许数据输入到数据库中,然后在从主活动页面登录时获取。
如果没有这两行,应用程序就能完美运行。 有人可以告诉我这个问题吗?
问题
//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
密码的正确格式为:
答案 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);
}