Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.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
Java 如何在不放弃中间字符串的情况下验证在EditText中键入的字符串?_Java_Android_Regex - Fatal编程技术网

Java 如何在不放弃中间字符串的情况下验证在EditText中键入的字符串?

Java 如何在不放弃中间字符串的情况下验证在EditText中键入的字符串?,java,android,regex,Java,Android,Regex,我正在尝试使用TextWatcher和regex来验证用户输入。请注意,我有一个复杂的正则表达式: edit.addTextChangedListener(new TextWatcher() { private final Pattern m_regex = Pattern.compile("([a-zA-Z]{4}[ ]{0,1}){7}"); @Override public void after

我正在尝试使用TextWatcher和regex来验证用户输入。请注意,我有一个复杂的正则表达式:

edit.addTextChangedListener(new TextWatcher() {           
            private final Pattern m_regex = Pattern.compile("([a-zA-Z]{4}[ ]{0,1}){7}");

            @Override
            public void afterTextChanged(Editable s) {
                  String text = s.toString();
                  int length = text.length();

                  if(!m_regex.matcher(text).matches() && length > 0) {
                       s.delete(length - 1, length);
                  }
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {}

        });

这里的问题是matcher只能检查两种字符串状态:与提供的表达式匹配和不匹配,但对于输入验证,您还需要检查中间状态-当字符串与模式不匹配但也不矛盾时。是否有任何方法可以使用我的正则表达式验证在
EditText
中键入的字符串?

与另一个正则表达式进行匹配。抱歉,如果答案看起来很傻,但正如您之前所说,matcher只能检查两种字符串状态:匹配和不匹配

编辑:

我更明白你的问题。您可以这样做:对照这个正则表达式测试输入

^(([a-zA-Z]{4}[ ]{0,1}){0,6}([a-zA-Z]{0,4})|([a-zA-Z]{4}))$
这将验证插入的文本。如果可以,让用户继续。只有当用户完成输入文本时,才应使用正则表达式!-


或者,如果要检查用户是否已完成写入,请执行以下操作:匹配我编写的正则表达式,查看文本是否正确。如果ok匹配您的,如果匹配,则用户已完成插入文本。

对另一个正则表达式进行匹配。抱歉,如果答案看起来很傻,但正如您之前所说,matcher只能检查两种字符串状态:匹配和不匹配

编辑:

我更明白你的问题。您可以这样做:对照这个正则表达式测试输入

^(([a-zA-Z]{4}[ ]{0,1}){0,6}([a-zA-Z]{0,4})|([a-zA-Z]{4}))$
这将验证插入的文本。如果可以,让用户继续。只有当用户完成输入文本时,才应使用正则表达式!-


或者,如果要检查用户是否已完成写入,请执行以下操作:匹配我编写的正则表达式,查看文本是否正确。如果ok匹配您的,如果匹配,则用户已完成插入文本。

完美,谢谢!除了像charm一样工作之外,您的正则表达式对我来说也是一个很好的分析练习,因为我对正则表达式不是很在行:)不客气!PS我添加了
^
(行首)和
$
(行尾)以检查全文。如果您不需要它们,只需返回到上一次编辑!太好了,谢谢!除了像charm一样工作之外,您的正则表达式对我来说也是一个很好的分析练习,因为我对正则表达式不是很在行:)不客气!PS我添加了
^
(行首)和
$
(行尾)以检查全文。如果您不需要它们,只需返回到上一次编辑!