向字符串添加数字验证
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");
}
}
我目前有 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");
}
}