2016-05-13 19 views
5

Chcę wykryć, czy mój edittext ma angielskie znaki i powiadamiać użytkownika, aby to zmienić, ponieważ chcę tylko perskie znaki dla imienia i nazwiska. jak mogę filtrować edittext, aby akceptować tylko perskie znaki lub wykrywać angielskie znaki i pokazywać błąd?Jak wykryć, czy edittext ma angielskie znaki?

+0

Pomimo różnych znaczników, to pytanie jest możliwy duplikat [Regex do sprawdzenia ciąg wejściowy jest tylko w języku perski] (http://stackoverflow.com/questions/10561590/regex-for-check -the-input-string-is-just-in-persian-language) - ponieważ jedyną istotną częścią jest wyrażenie regularne. – Renan

+0

@Amir_P Czy możesz wkleić swój kod pls? –

+0

Sprawdź w edytowanym tekście mają ciągi A-zi-z przy pomocy ciągów Regx na textchangelistner –

Odpowiedz

9

Myślę, że nie jest to łatwe do wykrycia i poinformowania użytkownika o konieczności instruowania. Po prostu możesz zrobić coś takiego. W pliku XML:

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

W Strings.xml:

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

Przykład Jeśli angielski:

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

ur języku samego jak ten.

4

Znaki perskie są w zakresie: [\u0600-\u06FF]. Sprawdź poprawność łańcucha za pomocą wyrażenia regularnego.

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

Co jeśli tekst zawiera: áéíóúçñ ¢ £ – Renan

+0

@Renan i czy są one poprawnymi angielskimi znakami? – user902383

+0

Są. Angielski ma takie słowa jak "resumé", "narzeczony" itp. – Renan

1

Podsumowując kilka rzeczy tutaj. Ponieważ, @Sergei Podlipaev zauważył, że perskie znaki są w zakresie \u0600 do \u06FF, można użyć wyrażenia regularnego. Nie jestem pewien, czy poprawnie określam granice, ale to da ci pomysł.

Aby sprawdzić, czy zestaw znaków używany jest język angielski - ^[a-zA-Z0-9]*$
Aby sprawdzić, czy perski zestaw znaków jest używany - ^[\u0600-\u06FF]+$

4

Spróbuj następujące wyrażenia regularnego wahać perski znaków.

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 
} 

Lub Użyj tej metody.

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; 
Powiązane problemy