我想知道文本是否包含乌尔都语或阿拉伯语中的任何字母。使用此条件会在特殊字符出现时产生错误结果。这是正确的方法。任何库或什么是正确的正则表达式?
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);
/* }*/
}
答案 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
。