【问题标题】:How to detect if edittext has English characters如何检测edittext是否有英文字符
【发布时间】:2016-09-09 13:47:39
【问题描述】:

我想检测我的edittext 是否有英文字符并通知用户更改它,因为我只想要波斯字符作为姓名和姓氏。如何过滤 edittext 以仅接受波斯字符或检测英文字符并显示错误?

【问题讨论】:

  • 尽管有不同的标签,但这个问题可能与Regex for check the input string is just in persian language 重复 - 因为唯一相关的部分是所涉及的正则表达式。
  • @Amir_P 你能粘贴你的代码吗?
  • 在 textchangelistner 上的 Regx 字符串的帮助下,签入编辑文本具有字符串 A-z 和 a-z
  • 您可以使用Text Watcher 实现此目的。
  • 另外,不要检查是否存在英文字符 - 检查是否存在任何非波斯字符。例如,“ñ”既不是英语也不是波斯语。

标签: java android


【解决方案1】:

波斯字符在以下范围内:[\u0600-\u06FF]。使用正则表达式验证您的字符串。

【讨论】:

    【解决方案2】:

    我认为它不容易检测并通知用户指示。 只需你可以做这样的事情。 在 XML 文件中:

    <EditText
        android:id="@+id/LanguageText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="text"
        android:digits="@string/app_lan" />
    

    在 Strings.xml 中:

    <string name="app_lan">YOUR LANGUAGE</string>
    

    英文示例:

    <string name="app_lan">abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ</string>
    

    你的语言也是这样的。

    【讨论】:

      【解决方案3】:
      public final static String PERSIAN_STRING = "ا آ ب پ ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ه ی";
      public final static String LATIN_STRING = "a b c d e f g h i j k l m n o p q r s t u v w x y z";
      
       if (PERSIAN_STRING.contains(str.toLowerCase()))
           lang = "PERSIAN";
      
        if (LATIN_STRING.contains(str.toLowerCase()))
            lang = "LATIN";
      

      【讨论】:

      • 如果文本包含这些怎么办:áéíóúçñ¢£
      • @Renan 他们是有效的英文字符吗?
      • 他们是。英语有“简历”、“未婚夫”等词。
      【解决方案4】:

      在这里总结几件事。由于@Sergei Podlipaev 注意到波斯字符在\u0600\u06FF 的范围内,因此您可以使用正则表达式。我不确定我是否正确指定了边界,但这会给你一个想法。

      查看是否使用英文字符集 - ^[a-zA-Z0-9]*$
      查看是否使用波斯字符集 - ^[\u0600-\u06FF]+$

      【讨论】:

        【解决方案5】:

        试试下面的正则表达式波斯字符范围。

        public static final Pattern RTL_CHARACTERS = 
            Pattern.compile("[\u0600-\u06FF\u0750-\u077F\u0590-\u05FF\uFE70-\uFEFF]");
        Matcher matcher = RTL_CHARACTERS.matcher("Texts");
        if(matcher.find()){
           return true;  // it's RTL
        } 
        

        或使用此方法。

        public static boolean textPersian(String s) {
        for (int i = 0; i < Character.codePointCount(s, 0, s.length()); i++) {
            int c = s.codePointAt(i);
            if (c >= 0x0600 && c <=0x06FF || c== 0xFB8A || c==0x067E || c==0x0686 || c==0x06AF)
                return true;
        }
        return false;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-22
          相关资源
          最近更新 更多