向字符串添加数字验证

Adding Number Validation to a String

我目前有 2 个设置为类型:数字的 editText 字段,用户可以在其中输入数字值,我已将这些 editText 字段添加为字符串,以便将这些值传递给 SQL 数据库.我想知道如何向用户需要输入的这些字段添加数字验证:大于或等于,以及小于和等于。请参见下面的示例:

     String number = ((EditText)findViewbyId(R.id.text_numberExample)).getText().toString();
     // How would I validate where the user is required to input number values between a range

试试这个

public class InputFilterMinMax implements InputFilter
{
    private final int min;
    private final int max;
    private final UtilityListener utilityListener;

    public InputFilterMinMax(int min, int max,UtilityListener utilityListener)
    {
        this.min = min;
        this.max = max;
        this.utilityListener = utilityListener;
    }

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend)
    {
        try
        {
            int input = Integer.parseInt(dest.toString() + source.toString());

            if (isInRange(min, max, input))
            {
                return null;
            }
            else
            {
                utilityListener.getItem("Value cannot exceed " + max);
            }
        }
        catch (NumberFormatException ignored)
        {
            utilityListener.getItem("NumberFormatException");
        }
        return "";
    }

    private boolean isInRange(int a, int b, int c)
    {
        return b > a ? c >= a && c <= b : c >= b && c <= a;
    }
}

这里是监听器

public interface UtilityListener
{
    void getItem(Object object);
}

并在 activity

binding.editText.setFilters(new InputFilter[]{new InputFilterMinMax(1,10, object ->
        {
            String message = (String) object;

            Toast.makeText(MainActivity.this,message,Toast.LENGTH_SHORT).show();
        })});

您可以使用 https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/to-int.html

获取 int 值

然后手动检查这个值是否在你的范围内

首先像这样在字符串中制作一个正则表达式

String limitValue = "[1-9]";

然后用if匹配

        if(number.matches(limitValue)){
            Log.v("OK","Number is in limit");
        }else{       
            Log.v("NOT OK","Number is not in limit");
        }

它是一个 java 实现。这个思路和android很像。对于 jave,我没有使用 ((EditText)findViewbyId(R.id.text_numberExample)).getText().toString(),而是使用 Scanner 来获取输入。

  • 接受输入后,检查它是数字还是字符串(如“Hello”)。如果是 Hello 这样的字符串,则抛出异常。同样,如果它是一个有效的数字但超出了您的期望范围,那么它也会抛出一个自定义异常。

  • 这两种情况,它都会强制用户进行有效输入。

  • 现在您再次将事物值转换为 string

import java.util.Scanner;

public class StringToNumberWithValidation{

    public static void main(String[] args) {
        
        Scanner in = new Scanner(System.in); 
        boolean flag = true;
        Long number = null;
        while(flag){
            System.out.print("Insert Number Example: ");
            String numberString = in.next();
            
            try {
                number = Long.parseLong(numberString);
                numberValidator(number);
                flag = false;
            }catch(NumberFormatException ex) {
                System.out.println(ex.toString());
            }
        }
        
        System.out.println(number);

    }
    
    static void numberValidator(Long number) {
        Long min = (long) 10;
        Long max = (long) 100;
        if(number >= min && number <= max ) {
            return;
        }
        throw new NumberFormatException("Number Out of Range");
        
    }

}