Я использовал Patterns.WEB_URL.matcher(str)
в своем приложении для проверки URL-адресов в своем приложении. Этот api отлично работает в API до Lollipop. Однако в Lollipop он проверяет даже «abd.def». Странное и плохое поведение. Любые предложения/идеи исправления?Неправильное поведение шаблонов.WEB_URL.matcher (str)
ответ
Странное и багги поведение
Использование встроенного запеченного регулярного выражения по определению «багги».
Список доменов верхнего уровня (TLD) неуклонно расширяется. Любое регулярное выражение, которое пытается ограничить известные TLD в это время, в конечном итоге станет устаревшим. Итак, 12 месяцев назад инженеры Google changed the regex to accept any TLD, so long as it uses the proper characters. Альтернативой является бесконечная серия отчетов об ошибках о том, как допустимые URL-адреса вызывают повторное выражение, когда эти URL-адреса были бы недействительными, если эта версия Android будет отправлена.
Любые предложения/идеи об исправлении?
Напишите свое собственное регулярное выражение. Или, разветвите старое регулярное выражение и сохраните свой собственный список действительных TLD. Или, проверьте URL-адреса другими способами. Или найдите кого-нибудь, активно поддерживающего библиотеку, которая позволяет вам сделать то же самое, где вы убедитесь, что вы продолжаете обновлять свое использование библиотеки, чтобы учесть новые TLD.
IOW, сделайте то, что не зависит от прошивки, и убедитесь, что вы поддерживаете его в точном соответствии с изменениями в действительных TLD.
Чтобы расширить на ответ CommonsWare, вот что я использую, чтобы избежать Linkify связь, казалось бы, случайный текст:
Linkify.TransformFilter filter = new Linkify.TransformFilter() {
public final String transformUrl(final Matcher match, String url) {
return match.group();
}
};
Pattern webURL = Pattern.compile(new StringBuilder()
.append("((?:(http|https|Http|Https|rtsp|Rtsp):")
.append("\\/\\/(?:(?:[a-zA-Z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)")
.append("\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,64}(?:\\:(?:[a-zA-Z0-9\\$\\-\\_")
.append("\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,25})?\\@)?)?")
.append("((?:(?:[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}\\.)+") // named host
.append("(?:") // plus top level domain
.append("(?:aero|arpa|asia|a[cdefgilmnoqrstuwxz])")
.append("|(?:biz|b[abdefghijmnorstvwyz])")
.append("|(?:cat|com|coop|c[acdfghiklmnoruvxyz])")
.append("|d[ejkmoz]")
.append("|(?:edu|e[cegrstu])")
.append("|f[ijkmor]")
.append("|(?:gov|g[abdefghilmnpqrstuwy])")
.append("|h[kmnrtu]")
.append("|(?:info|int|i[delmnoqrst])")
.append("|(?:jobs|j[emop])")
.append("|k[eghimnrwyz]")
.append("|l[abcikrstuvy]")
.append("|(?:mil|mobi|museum|m[acdghklmnopqrstuvwxyz])")
.append("|(?:name|net|n[acefgilopruz])")
.append("|(?:org|om)")
.append("|(?:pro|p[aefghklmnrstwy])")
.append("|qa")
.append("|r[eouw]")
.append("|s[abcdeghijklmnortuvyz]")
.append("|(?:tel|travel|t[cdfghjklmnoprtvwz])")
.append("|u[agkmsyz]")
.append("|v[aceginu]")
.append("|w[fs]")
.append("|y[etu]")
.append("|z[amw]))")
.append("|(?:(?:25[0-5]|2[0-4]") // or ip address
.append("[0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9])\\.(?:25[0-5]|2[0-4][0-9]")
.append("|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(?:25[0-5]|2[0-4][0-9]|[0-1]")
.append("[0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}")
.append("|[1-9][0-9]|[0-9])))")
.append("(?:\\:\\d{1,5})?)") // plus option port number
.append("(\\/(?:(?:[a-zA-Z0-9\\;\\/\\?\\:\\@\\&\\=\\#\\~") // plus option query params
.append("\\-\\.\\+\\!\\*\\'\\(\\)\\,\\_])|(?:\\%[a-fA-F0-9]{2}))*)?")
.append("(?:\\b|$)").toString()
);
Linkify.addLinks(myTextView, webURL, null, null, filter);
- 1. Неправильное поведение atof()
- 2. Неправильное поведение Linux-канала
- 3. Неправильное поведение компилятора
- 4. Android: неправильное поведение слушателя?
- 5. Неправильное поведение индикатора прокрутки
- 6. Угловая ошибка Неправильное поведение
- 7. CUDA tex1Dfetch() неправильное поведение
- 8. UISplitViewController's preferredDisplayMode: неправильное поведение
- 9. Неправильное поведение перетаскивания?
- 10. Неправильное поведение BottomSheet
- 11. System.Windows.Shapes.Path неправильное поведение
- 12. Неправильное поведение условного выражения
- 13. Неправильное поведение установщика пакетов
- 14. Неправильное поведение метода delete()
- 15. WPF Неправильное поведение перетаскивания
- 16. Неправильное поведение расщепленной функции
- 17. InMemoryRandomAccessStream неправильное поведение
- 18. Imageresizer: неправильное поведение обрезки
- 19. Html.Action неправильное поведение
- 20. Можно ли перезаписать поведение str str с помощью __rmod__?
- 21. Слово VBA Tabstop неправильное поведение
- 22. Неправильное поведение IsAlive() в Thread
- 23. Неправильное поведение для алгоритма сортировки
- 24. неправильное поведение при downcasting C++
- 25. Неправильное поведение с плавающей запятой
- 26. Неправильное поведение версии Xcode/iTunesConnect
- 27. Неправильное поведение наложения в FrameLayout
- 28. PHPExcel_IOFactory :: createWriter вызывает неправильное поведение
- 29. Многопоточности: Неправильное поведение синхронизированного метода
- 30. Backspace неправильное поведение в textarea
Я рекомендую прочитать: [Почему я избегаю android.util.Patterns] (Http: // блога. danlew.net/2014/05/22/why-i-dont-use-patterns/). – Ziem