如何检测edittext是否包含英文字符

时间:2016-05-13 11:19:20

标签: java android

我想检测我的$arrFirst = array(0=>"1785328791698338",1=>"1785328791698334",3=>"1785328791698336"); $arrMain = array(0=>"10207252567926988",1=>"10208823390691752",3=>"10209064245580796",4=>"1785328791698338"); $arrIntersect = array_intersect( $arrMain,$arrFirst); $resultArray = array_diff($arrFirst, $arrIntersect); print "<pre>";print_r($resultArray); 是否有英文字符并通知用户更改它,因为我只想要名字和姓氏的波斯字符。如何过滤edittext只接受波斯字符或检测英文字符并显示错误?

5 个答案:

答案 0 :(得分:9)

我认为不容易检测并告知用户指示。 你可以做这样的事情。 在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>

对于你这样的语言。

答案 1 :(得分:4)

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

答案 2 :(得分:4)

尝试使用以下正则表达式波斯语字符范围。

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;

答案 3 :(得分:1)

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";

答案 4 :(得分:1)

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

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