正则表达式的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]
,否则那些正则表达式就可以了;他们不应该在正确的输入上失败。用户名和电子邮件对我都有效,但我正在努力使用密码,您显示的正则表达式进行了哪些验证?用户名和电子邮件对我都有效,但我正在努力使用密码,您显示的正则表达式进行了哪些验证?