【问题标题】:How to detect cyrillic text in edit text?如何检测编辑文本中的西里尔文字?
【发布时间】:2015-09-25 10:27:15
【问题描述】:

我需要保护在我的应用程序中输入西里尔文字。

有什么方法可以检测editText中输入符号的编码吗?

【问题讨论】:

  • 你可以检查键盘的语言
  • 我必须把它放在哪里?在 textWatcher 里面还是在哪里?
  • 请详细说明您的用例。根据您的用例,您可以使用this 或使用正则表达式,可以使用文本观察器进行检查。
  • @RahulTiwari,谢谢 :) 半小时找到这个解决方案)
  • @LudoBagman 仍然存在问题,你想做什么 :)

标签: android character-encoding android-edittext cyrillic


【解决方案1】:

解决方案:

您需要在您的EditText 上申请InputFilter

示例:

在您的EditText 上设置过滤器

etNonCyrillic = (EditText) findViewById(R.id.etNonCyrillic );
etNonCyrillic .setFilters(new InputFilter[]{cyrillicFilter});

实现cyrillicFilter:

    public static InputFilter cyrillicFilter = new InputFilter() {
    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        boolean keepOriginal = true;
        StringBuilder sb = new StringBuilder(end - start);
        for (int i = start; i < end; i++) {
            char c = source.charAt(i);
            if (!isCyrillicCharacter(c))
            {
                sb.append(c);
            }
            else
            {
                keepOriginal = false;
            }
        }
        if (keepOriginal)
            return null;
        else {
            if (source instanceof Spanned) {
                SpannableString sp = new SpannableString(sb);
                TextUtils.copySpansFrom((Spanned) source, start, sb.length(), null, sp, 0);
                return sp;
            } else {
                return sb;
            }           
        }
    }

    @SuppressLint("NewApi")
    private boolean isCyrillicCharacter(char c)
    {
        boolean isPriorToKitkat = android.os.Build.VERSION.SDK_INT<19;
        UnicodeBlock block = UnicodeBlock.of(c);
        boolean isCyrillicCharacter = (block.equals(UnicodeBlock.CYRILLIC) || block.equals(UnicodeBlock.CYRILLIC_SUPPLEMENTARY) || (isPriorToKitkat?false:(block.equals(UnicodeBlock.CYRILLIC_EXTENDED_A) || block.equals(UnicodeBlock.CYRILLIC_EXTENDED_B))));
        return isCyrillicCharacter;
    }
};

【讨论】:

    【解决方案2】:

    Kotlin 中防止用户使用西里尔字母和希腊字母保存详细信息的解决方案

     fun isOnlyLatinLetters(string: String?): Boolean {
        if (string == null) return false
        return !(CYRILLIC.containsMatchIn(string)
          || GREEK.containsMatchIn(string))
      }
    
      private val CYRILLIC = Pattern.compile("[Ѐ-ӿ]").toRegex()
      private val GREEK = Pattern.compile("[Ͱ-Ͽ]").toRegex()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-30
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      • 2013-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多