如何知道文本是阿拉伯语或乌尔都语

时间:2016-10-03 10:57:56

标签: java android regex arabic urdu

我想知道文本是否包含乌尔都语或阿拉伯语中的任何字母。使用此条件会在特殊字符出现时产生错误结果。这是正确的方法。任何库或什么是正确的正则表达式?

   if (cap.replaceAll("\\s+", "").matches("[A-Za-z]+")
                    || cap.replaceAll("\\s+", "").matches("[A-Za-z0-9]+")) {
                Log.d("isUrdu", "false");
                caption.setTypeface(Typeface.DEFAULT);
                caption.setTextSize(16);

            } else {
                Log.d("isUrdu", "True");
             /*   if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR1) {*/
                    caption.setTypeface(typeface);
                    caption.setTextSize(20);

         /*       }*/
            }

3 个答案:

答案 0 :(得分:2)

看一下Wikipedia Urdu alphabet,它包括以下Unicode范围:

U+0600 to U+06FF
U+0750 to U+077F
U+FB50 to U+FDFF
U+FE70 to U+FEFF

要匹配阿拉伯字母,您可以使用\p{InArabic} Unicode属性类。

所以,你可以使用

if (cap.matches("(?s).*[\\u0600-\\u06FF\\u0750-\\u077F\\uFB50-\\uFDFF\\uFE70‌​-\\uFEFF].*"))
{
    /*There is an Urdu character*/
} 
else if (cap.matches("(?s).*\\p{InArabic}.*"))
{  
    /* The string contains an Arabic character */ 
}
else { /*No Arabic nor Urdu chars detected */ }

请注意(?s)启用DOTALL修饰符,以便.也可以匹配换行符号。

为了更好地使用matches,您可以分别使用反向类而不是第一个.*"(?s)[^\\u0600-\\u06FF\\u0750-\\u077F\\uFB50-\\uFDFF\\uFE70‌​-\\uFEFF]*[\\u0600-\\u06FF\\u0750-\\u077F\\uFB50-\\uFDFF\\uFE70‌​-\\uFEFF].*""(?s)\\P{InArabic}*\\p{InArabic}.*"

请注意,您还可以使用较短的"[\\u0600-\\u06FF\\u0750-\\u077F\\uFB50-\\uFDFF\\uFE70‌​-\\uFEFF]""\\p{InArabic}"模式与Matcher#find()

答案 1 :(得分:0)

在此尝试此操作,您可以获得文本是否为阿拉伯语

var arregex = /[\u0600-\u06FF]/; var test = arregex.test(text); return test;

答案 2 :(得分:0)

你可以在这里没有正则表达式,你只需要找到阿拉伯语和乌尔都语UTF字符范围是什么,然后看看输入的文本是否与范围匹配,因为乌尔都语用阿拉伯语字符写的比你需要的只有阿拉伯语范围是0600-06FF