我有一个用户输入单元格编号的UI,数字存储在字符串变量中,然后存储到数据库中。
我想验证字符串以检查字符串是否不包含任何字符。
我该怎么做?
下面是字符串代码。
EditText editText3 = (EditText) this.findViewById(R.id.editText2);
setNum = editText3.getText().toString(); //setNum would contain something link 8081124589
答案 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)
您可以使用正则表达式模式来验证电话号码格式。
考虑以下有关电话号码格式的事实:-
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/