Android 正则表达式不匹配
我试图用正则表达式验证我的字符串。这就是我要做的Android 正则表达式不匹配,android,regex,Android,Regex,我试图用正则表达式验证我的字符串。这就是我要做的 EditText serialText = (EditText) findViewById(R.id.pinText); serialText.setVisibility(View.VISIBLE); serialNumber = serialText.getText().toString(); 我将序列号存储在serialNumber中 我有以下方法来匹配正则表达式 boolean isRegularSerialNumber(String p
EditText serialText = (EditText) findViewById(R.id.pinText);
serialText.setVisibility(View.VISIBLE);
serialNumber = serialText.getText().toString();
我将序列号存储在serialNumber中
我有以下方法来匹配正则表达式
boolean isRegularSerialNumber(String pinNumber) {
// regular expression to be matched against
String regularString = "[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}";
Pattern pattern = Pattern.compile(regularString);
Matcher matcher = pattern.matcher(pinNumber);
boolean isRegularSerialNumberValid ;
if (pinNumber.matches(regularString))
isRegularSerialNumberValid = true;
else
isRegularSerialNumberValid = false;
return isRegularSerialNumberValid;
}
但我无法与之匹敌
有什么答案吗?“希望模式”和“匹配器”是适合这一点的
我想做的是,这个匹配的序列号,我正在根据数据库中存储的序列号进行验证。如果找到匹配项,则返回成功或失败。我已经输入了存储在数据库中的确切序列号,但即使如此,它仍然返回失败 我遵循@Stevehb所说的方法,在这种情况下,我得到了匹配结果 这就是我发送数据的方式 添加(新的BasicNameValuePair(“validate”,serialNumber))
这让我大吃一惊。看起来很像.net正则表达式代码 而不是
if (pinNumber.matches(regularString))
试一试
看起来很像.net正则表达式代码 而不是
if (pinNumber.matches(regularString))
试一试
内置的
字符串
函数应该可以自己工作<代码>isRegularSerialNumber()可以是
boolean isRegularSerialNumber(String pinNumber) {
String regularString = "[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}";
return pinNumber.matches(regularString);
}
当我测试1234-5678-9012-1324
(真)和12-1234-123-1324
(假)时,这对我很有用
此外,看起来您可能正在从
serialText
抓取输入字符串,然后将其显示出来。您的问题可能是在用户输入之前抓取文本吗?内置的字符串
函数应该可以自己工作<代码>isRegularSerialNumber()可以是
boolean isRegularSerialNumber(String pinNumber) {
String regularString = "[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}";
return pinNumber.matches(regularString);
}
当我测试1234-5678-9012-1324
(真)和12-1234-123-1324
(假)时,这对我很有用
此外,看起来您可能正在从
serialText
抓取输入字符串,然后将其显示出来。您的问题可能是在用户输入之前抓取文本吗?我认为您不需要isRegularSerialNumber()中的Matcher
。你没有使用它。你认为这是我遇到的问题吗?你不能这样写你的模式:“([0-9]{4}){4}”
?只是一个优化。。。然后使用你的匹配器,你已经创建了:if(matcher.matches()){…}else{…}
@Rafael T:([0-9]{4}){4}
与连字符不匹配。匹配器对象没有被使用,但这不是你得到错误结果的原因。正如@stevehb在他的回答中所说,我认为问题在于输入。我认为您不需要isRegularSerialNumber()
中的Matcher
。你没有使用它。你认为这是我遇到的问题吗?你不能这样写你的模式:“([0-9]{4}){4}”
?只是一个优化。。。然后使用你的匹配器,你已经创建了:if(matcher.matches()){…}else{…}
@Rafael T:([0-9]{4}){4}
与连字符不匹配。匹配器对象没有被使用,但这不是你得到错误结果的原因。我认为问题在于输入,正如@stevehb在回答中所说的那样,+1。。。或者可能在pin码周围有额外的字符。例如,isRegularSerialNumber(“1234-5678-9012-3456”)
为真,但isRegularSerialNumber(“1234-5678-9012-3456”)
为假。或者可能正在删除连字符@贾斯维,你在检查发送到该方法的字符串吗?@stevehb,我尝试了你的方法。这对我来说是真的,但是当我试图用Http post发布相同的序列号时,它给了我无效的序列号。我已经根据我的要求给出了正确的序列号。@Alan Moore,是的,我只检查了发送到该方法的字符串。在这一部分中,我能够做到这一点,您应该向正则表达式添加锚,比如^[0-9]{4}([0-9]{4}}{3}$
,否则它也将匹配123456-1234-1234-123456。(还对正则表达式进行了重构,以减少其重复性;这里的主要问题是在行首添加了行首标记^
,在行尾添加了行尾标记$
)+1。。。或者可能在pin码周围有额外的字符。例如,isRegularSerialNumber(“1234-5678-9012-3456”)
为真,但isRegularSerialNumber(“1234-5678-9012-3456”)
为假。或者可能正在删除连字符@贾斯维,你在检查发送到该方法的字符串吗?@stevehb,我尝试了你的方法。这对我来说是真的,但是当我试图用Http post发布相同的序列号时,它给了我无效的序列号。我已经根据我的要求给出了正确的序列号。@Alan Moore,是的,我只检查了发送到该方法的字符串。在这一部分中,我能够做到这一点,您应该向正则表达式添加锚,比如^[0-9]{4}([0-9]{4}}{3}$
,否则它也将匹配123456-1234-1234-123456。(还对正则表达式进行了重构,以减少其重复性;这里的主要问题是在开始处添加了行首标记^
,在结束处添加了行尾标记$
。)