2016-05-13 13 views
5

Voglio rilevare se il mio edittext ha caratteri inglesi e avvisare l'utente di cambiarlo perché voglio solo caratteri persiani per nome e cognome. come posso filtrare edittext per accettare solo caratteri persiani o rilevare caratteri inglesi e mostrare un errore?Come rilevare se edittext ha caratteri inglesi

+0

Pur avendo tag diversi, questa domanda è un possibile duplicato di [Regex per il controllo la stringa di input è solo in lingua persiana] (http://stackoverflow.com/questions/10561590/regex-for-check -the-input-string-is-just-in-persian-language) - poiché l'unica parte rilevante è l'espressione regolare implicata. – Renan

+0

@Amir_P Puoi incollare il codice pls? –

+0

controllare il testo di modifica con stringhe A-z e a-z con l'aiuto delle stringhe Regx su textchangelistner –

risposta

9

Penso che non sia facile da rilevare e informare l'utente di istruire. Semplicemente puoi fare qualcosa del genere. Nel file XML:

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

In strings.xml:

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

Esempio Se l'inglese:

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

Per ur linguaggio stesso come questo.

4

I caratteri persiani rientrano nell'intervallo: [\u0600-\u06FF]. Convalida la tua stringa con regex.

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

Cosa succede se il testo contiene questi: áéíóúçñ ¢ £ – Renan

+0

@ Renan e sono caratteri inglesi validi? – user902383

+0

Essi sono. L'inglese ha parole come "resumé", "fidanzato" ecc. – Renan

1

Riassumendo un paio di cose qui. Poiché, @Sergei Podlipaev ha rilevato che i caratteri persiani sono compresi nell'intervallo \u0600 a \u06FF, è possibile utilizzare espressioni regolari. Non sono sicuro se sto specificando correttamente i limiti, ma questo ti darà un'idea.

per vedere se viene utilizzato il set di caratteri inglese - ^[a-zA-Z0-9]*$
per vedere se viene utilizzato il set di caratteri Persico - ^[\u0600-\u06FF]+$

4

Provare la seguente espressione regolare Persico caratteri variano.

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 
} 

O utilizzare questo metodo.

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; 
Problemi correlati