Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 正则表达式不匹配_Android_Regex - Fatal编程技术网

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。(还对正则表达式进行了重构,以减少其重复性;这里的主要问题是在开始处添加了行首标记
^
,在结束处添加了行尾标记
$
。)