Проверка номера ячейки в Android - PullRequest
3 голосов
/ 11 мая 2011

У меня есть пользовательский интерфейс, в котором пользователь вводит номер ячейки, а номер сохраняется в строковой переменной, а затем сохраняется в базе данных.

Я хочу проверить строку, чтобы проверить, не содержит ли строка какие-либо символы.

Как мне это сделать?

Ниже приведен строковый код.

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

Ответы [ 5 ]

27 голосов
/ 11 мая 2011

Чтобы проверить строку, используйте

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).цифры, добавочные номера и т. д.).Источник этого ответа: Комплексное регулярное выражение для проверки номера телефона

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+))?$"
10 голосов
/ 15 декабря 2012

Для уровня 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();
    }
}
1 голос
/ 27 ноября 2014

Мне нравится использовать 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;
 }

Кроме того, вам может потребоваться разрешение для TelephonyManager [не слишком уверен?нужна ссылка].Если это так, добавьте это в манифест:

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

1 голос
/ 11 мая 2011

если вы просто хотите проверить, является ли его число, вы можете попробовать try {Integer.parseInt (setNum); продолжай идти} catch (Exception e) {упс, не число}

или Double.parseDouble (setNum); в зависимости от того, какой номер вы ожидаете.

или вы можете сначала удалить пробел, а затем сделать все выше.

или вы можете использовать регулярное выражение, но это, вероятно, излишне.

но, возможно, вам следует ограничить количество символов, разрешенных в тексте редактирования. в xml-файле вы можете добавить свойство android: digits = "0123456789- ()", например.

Вы также можете попытаться предварительно заполнить номер телефона, если вы пытаетесь получить номер телефона устройства, на котором установлено приложение:

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

и android-разрешение использования: name = "android.permission.READ_PHONE_STATE".

обратите внимание, что это не всегда работает (см. Программно получить номер телефона телефона Android )

0 голосов
/ 18 декабря 2014

Вы можете использовать регулярное выражение, как один из уже указанных ответчиков.Чтобы направить сообщение о нарушении в компонент, можно использовать сообщение setError:

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

Это стандартная методика, помечающая компонент пользовательского интерфейса, имеющий ошибку.Он был использован внутри приложения BARACUS Framework для Android, чтобы иметь декларативную проверку формы в Android.

Так как материал лицензирован Apache 2, не стесняйтесь дословно код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...