Java 使用正则表达式检查数字是否匹配

Java 使用正则表达式检查数字是否匹配,java,android,regex,xml,Java,Android,Regex,Xml,编辑文本视图 <EditText android:id="@+id/inputField" android:layout_width="300dp" android:layout_height="50dp" android:hint="@string/input_placeholder" android:textColorHint="@color/colorAccent" android:inp

编辑文本视图

<EditText
        android:id="@+id/inputField"
        android:layout_width="300dp"
        android:layout_height="50dp"
        android:hint="@string/input_placeholder"
        android:textColorHint="@color/colorAccent"
        android:inputType="number"
        android:layout_centerHorizontal="true"
        android:textColor="@color/colorPrimary"
        android:textSize="25sp"
        android:padding="10dp"
        android:layout_marginTop="100dp"
        android:gravity="center"/>
main活动 问题是当用户从视图中输入editText中的数字时,我收到数字并将其转换为字符串,然后用正则表达式进行测试,但它不起作用。我不知道问题出在哪里

regexHolder operatorPatterns = new regexHolder();

    final Pattern tigoOne = Pattern.compile(operatorPatterns.patten_one());


    Button mBtn =findViewById(R.id.loginBtn);


    mBtn.setOnClickListener(
            new View.OnClickListener()
            {
                EditText texEdit = findViewById(R.id.inputField);
                TextView viewText = findViewById(R.id.operatorDisplay);

                String content = texEdit.getText().toString();

                Matcher tigoMatcher = tigoOne.matcher(content);

                public void onClick(View view)
                {

                    if (tigoMatcher.matches())
                    {
                        String message = "valid";
                        viewText.setText(message);

                    }else{
                        String message = "not valid";
                        viewText.setText(message);
                    }
                }
            }

    );

首先你需要修正你的正则表达式。根据您尝试的正则表达式和您的评论,我猜您希望:

(?:255|0)71[2-9]\\d{6}
以255或0开头,后跟71,后跟2-9范围内的数字,后跟其他6位数字

其次,修复单击式侦听器

这两条线:

String content = texEdit.getText().toString();

Matcher tigoMatcher = tigoOne.matcher(content);
将在创建侦听器时运行,此时文本编辑为空。您需要将这些行移动到
onClick
方法:

new View.OnClickListener()
{
    EditText texEdit = findViewById(R.id.inputField);
    TextView viewText = findViewById(R.id.operatorDisplay);

    public void onClick(View view)
    {

        String content = texEdit.getText().toString();

        Matcher tigoMatcher = tigoOne.matcher(content);

        if (tigoMatcher.matches())
        {
            String message = "valid";
            viewText.setText(message);

        }else{
            String message = "not valid";
            viewText.setText(message);
        }
    }
}

Re:“但它不起作用”,那么,它到底是做什么的?你的正则表达式应该做什么<代码>[2550]看起来很奇怪。@I'L'I在尝试测试它是否匹配时,请参见
if部分的
,但输入的数字无效时,它将提供无效的数字valid@Sweeper
[2550]
这个正则表达式用来检查225或0,它是从数字开始的。你不需要那些
{1}
因为它们是无用的。“225或0”的正则表达式是
(225 | 0)
。不是
[2550]
。谢谢,但我不了解演员的想法和含义,请帮助。谢谢,现在它可以工作了,但我不了解演员的想法和含义,请explain@Kassambinary如果它有效,那么忽略我对演员的评论。我已经有一段时间没用安卓了。我认为您需要执行
EditText texEdit=(EditText)findviewbyd(R.id.inputField)
,但您在Android O中使用的是通用的
findViewById
,因此不需要强制转换。
new View.OnClickListener()
{
    EditText texEdit = findViewById(R.id.inputField);
    TextView viewText = findViewById(R.id.operatorDisplay);

    public void onClick(View view)
    {

        String content = texEdit.getText().toString();

        Matcher tigoMatcher = tigoOne.matcher(content);

        if (tigoMatcher.matches())
        {
            String message = "valid";
            viewText.setText(message);

        }else{
            String message = "not valid";
            viewText.setText(message);
        }
    }
}