验证Android中的单元格号

时间:2011-05-11 02:44:23

标签: android string validation

我有一个用户输入单元格编号的UI,数字存储在字符串变量中,然后存储到数据库中。

我想验证字符串以检查字符串是否不包含任何字符。

我该怎么做?

下面是字符串代码。

EditText editText3 = (EditText) this.findViewById(R.id.editText2);
setNum = editText3.getText().toString(); //setNum would contain something link 8081124589

6 个答案:

答案 0 :(得分:27)

要验证字符串,请使用

if (setNum.matches(regexStr))

regexStr可以是:

//matches numbers only
String regexStr = "^[0-9]*$"

//matches 10-digit numbers only
String regexStr = "^[0-9]{10}$"

//matches numbers and dashes, any order really.
String regexStr = "^[0-9\\-]*$"

//matches 9999999999, 1-999-999-9999 and 999-999-9999
String regexStr = "^(1\\-)?[0-9]{3}\\-?[0-9]{3}\\-?[0-9]{4}$"

有一个很长的正则表达式来验证美国的手机(7到10位数,允许扩展等)。来源是这个答案:A comprehensive regex for phone number validation

String regexStr = "^(?:(?:\\+?1\\s*(?:[.-]\\s*)?)?(?:\\(\\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\\s*\\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\\s*(?:[.-]\\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\\s*(?:[.-]\\s*)?([0-9]{4})(?:\\s*(?:#|x\\.?|ext\\.?|extension)\\s*(\\d+))?$"

答案 1 :(得分:10)

对于API级别8或以上:

public static final boolean isValidPhoneNumber(CharSequence target) {
    if (target == null || TextUtils.isEmpty(target)) {
        return false;
    } else {
        return android.util.Patterns.PHONE.matcher(target).matches();
    }
}

答案 2 :(得分:1)

如果您只想测试它是否可以尝试{Integer.parseInt(setNum);继续}捕捉(例外e){oops not a number}

或Double.parseDouble(setNum);取决于您期望的数字类型。

或者您可以先删除空格然后再执行上述操作。

或者你可以使用正则表达式,但那可能有点过分。

但也许你应该限制第一个地方的edittext中允许的字符。在xml文件中,你可以添加属性android:digits =“0123456789-()”例如。

如果您尝试获取安装该应用的设备的电话号码,您还可以尝试预先填充电话号码:

TelephonyManager tMgr =(TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
  mPhoneNumber = tMgr.getLine1Number();

和uses-permission android:name =“android.permission.READ_PHONE_STATE”。

请注意,这并不总是有效(请参阅Programmatically obtain the phone number of the Android phone

答案 3 :(得分:1)

我喜欢使用PhoneNumberUtils。具体来说 - formatNumber(String num, String defaultCountryIso)。如果formatNumber();在尝试格式化后无效,则null将返回 EditText editText3 = (EditText) this.findViewById(R.id.editText2); String setNum; if(!TextUtils.isEmpty(editText3.getText()){ setNum = editText3.getText.toString(); /* format with PhoneNumberUtils */ TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); String mCountryCode = telephonyManager.getNetworkCountryIso(); // I like to check for sdk cause less than 21 won't support default country code if (android.os.Build.VERSION.SDK_INT >= 21) { setNum = PhoneNumberUtils.formatNumber(phoneNumber, mCountryCode); } else { // this one is deprecated setNum = PhoneNumberUtils.formatNumber(phoneNumber); } // if setNum is not null, you now have a valid formatted number if(setNum != null){ return true; } else { editText3.setError("Invalid phone number"); Log.d(TAG, "Invalid phone number: " + setNum); return false; } } else { return false; } 。否则,它将返回格式化的字符串。

示例:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

此外,您可能需要TelephonyManager的许可[不太确定?需要链接]。如果是这样,请将其添加到清单:

  

{{1}}

答案 4 :(得分:0)

您可以使用正如其中一个已声明的回复符号这样的正则表达式。要将违规消息路由到组件,可以使用setError消息;

TextView v = (TextView) view;
setError(message);

这是标记具有错误的UI组件的标准技术。它已在BARACUS Framework for Android应用程序中使用,以便在android中拥有declarative form validation

由于这些内容已获得Apache 2许可,因此verbatim the code可以免费使用。

答案 5 :(得分:0)

您可以使用正则表达式模式来验证电话号码格式。

考虑以下有关电话号码格式的事实:-

  1. 国家/地区代码前缀以“ +”开头,并且具有1到3位数字
  2. 号码的最后一部分(也称为订户号码)是所有号码中的4位数字
  3. 大多数国家/地区(不包括国家/地区代码)后都有10位数字的电话号码。一般观察到,所有国家/地区的电话号码在排除国家/地区代码后都介于8到11位之间。
String allCountryRegex = "^(\\+\\d{1,3}( )?)?((\\(\\d{1,3}\\))|\\d{1,3})[- .]?\\d{3,4}[- .]?\\d{4}$";

让我们打破正则表达式并了解

  • ^表达式的开始
  • (\\+\\d{1,3}( )?)?是1到3位数字之间的国家/地区代码(可选),以'+'开头,后跟空格或无空格。
  • ((\\(\\d{1,3}\\))|\\d{1,3}是1到3位的必填组,带或不带括号,后接连字符,空格或不带空格。
  • \\d{3,4}[- .]?是3或4位数字的必填组,后跟连字符,空格或无空格
  • \\d{4}是最后4位数字的必填组
  • $表达式的结尾

此正则表达式模式与大多数国家/地区的电话号码格式匹配,包括:-

        String Afghanistan      = "+93 30 539-0605";
        String Australia        = "+61 2 1255-3456";
        String China            = "+86 (20) 1255-3456";
        String Germany          = "+49 351 125-3456";
        String India            = "+91 9876543210";
        String Indonesia        = "+62 21 6539-0605";
        String Iran             = "+98 (515) 539-0605";
        String Italy            = "+39 06 5398-0605";
        String NewZealand       = "+64 3 539-0605";
        String Philippines      = "+63 35 539-0605";
        String Singapore        = "+65 6396 0605";
        String Thailand         = "+66 2 123 4567";
        String UK               = "+44 141 222-3344";
        String USA              = "+1 (212) 555-3456";
        String Vietnam          = "+84 35 539-0605";

来源:https://codingnconcepts.com/java/java-regex-for-phone-number/