Jak*_*ake 22 string url-validation dart flutter
我正在尝试创建一个系统,我可以在其中验证字符串以检查它是否是 url。( https://www.google.com/ )
我找到了 flutter 包验证器,但这与 dart 2 不兼容,因此与我的代码不兼容。
同样命名,我也找到了验证器包,但我似乎无法让它与我的代码一起正常工作,因为它会引发以下错误;(希望你喜欢我的项目名称;)
Because every version of flutter_test from sdk depends on test 1.3.0
and every version of validators depends on test ^1.3.3, flutter_test from sdk is incompatible with validators.
So, because gucci depends on both validators ^1.0.0+1 and flutter_test any from sdk, version solving failed.
Unable to reload your application because "flutter packages get" failed to update package dependencies.
Exception: pub get failed (1)
Run Code Online (Sandbox Code Playgroud)
如果您可以找到一个修复程序,validators以便它不会抛出此错误并因此与我的代码一起正常工作,或者建议另一种验证字符串是否符合 URL 的方法,那就太好了。
谢谢
编辑- 我的pubspec.yaml文件
name: gucci
description: A new Flutter project.
dependencies:
flutter:
sdk: flutter
cupertino_icons:
barcode_scan:
gradient_app_bar:
url_launcher:
validate: ^1.7.0
dev_dependencies:
flutter_test:
sdk: flutter
fonts:
- family: PlayfairDisplay
fonts:
- asset: fonts/PlayfairDisplay-BoldItalic.ttf
- family: Kanit
fonts:
- asset: fonts/Kanit-ExtraBoldItalic.ttf
- family: Poppins
fonts:
- asset: fonts/Poppins-BoldItalic.ttf
- family: PoppinsLightItalic
fonts:
- asset: fonts/Poppins-LightItalic.ttf
- family: PoppinsMediumItalic
fonts:
- asset: fonts/Poppins-MediumItalic.ttf
Run Code Online (Sandbox Code Playgroud)
iPa*_*tel 25
要检查有效 URL 字符串,您只需使用Uri.parse()如下所示。
bool _validURL = Uri.parse(_adVertData.webLink).isAbsolute;
Run Code Online (Sandbox Code Playgroud)
只需检查的值 _validURL
Set*_*hil 13
我使用了下面的方法。根据您的建议,所有有效的网址都需要有一个主机(例如 google.com)。如果 URL 没有主机,则返回空字符串(不是未定义或 null)。
bool isURLValid = Uri.parse('https://google.com/').host.isNotEmpty;
Run Code Online (Sandbox Code Playgroud)
正如一些人已经报告的那样,使用 .isAbsolute 将诸如“http:”之类的 URL 标记为有效 URL,但实际上并非如此。
Joh*_*ang 10
var urlPattern = r"(https?|http)://([-A-Z0-9.]+)(/[-A-Z0-9+&@#/%=~_|!:,.;]*)?(\?[A-Z0-9+&@#/%=~_|!:??,.;]*)?";
var match = new RegExp(urlPattern, caseSensitive: false).firstMatch('https://www.google.com');
match = RegExp(urlPattern, caseSensitive: false).firstMatch('http://www.google.com');
Run Code Online (Sandbox Code Playgroud)
您也可以使用正则表达式。
由于某种原因,该validators包需要最新版本的 flutter 测试库,而不是将其留给应用程序。也许这是有充分理由的(即他们正在使用一项新功能)。
flutter 引擎内部需要特定版本的 flutter_test 库(这就是为什么指定它的版本通常不是一个好主意)。因此,要解决此问题,您必须通过运行来升级您的 flutter flutter upgrade。如果您已经使用所在频道的最新版本,则可能需要运行flutter channel dev或flutter channel master切换到更新更频繁的频道(实际上是分支)。
我dev大部分时间都在分支/通道上运行,虽然偶尔会出现问题,但不会经常发生。如果可能的话,我建议不要使用 master 分支。
Uri.tryParse(mystring)?.hasAbsolutePath ?? false;
Run Code Online (Sandbox Code Playgroud)
一些示例结果:
| 网址 | 结果 |
|---|---|
'/sf/ask/3708301761/' |
真的 |
asd |
错误的 |
asd:asd |
错误的 |
%EMPTY_STRING% |
错误的 |
google.nl |
错误的 |
https: |
错误的 |
https:// |
错误的 |
https://a |
错误的 |
https://a/ |
真的 |
使用正则表达式进行验证
String hasValidUrl(String value) {
String pattern = r'(http|https)://[\w-]+(\.[\w-]+)+([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?';
RegExp regExp = new RegExp(pattern);
if (value.length == 0) {
return 'Please enter url';
}
else if (!regExp.hasMatch(value)) {
return 'Please enter valid url';
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
使用内置包进行验证
final Uri uri = Uri.tryParse(value);
if (!uri.hasAbsolutePath) {
return 'Please enter valid url';
}
Run Code Online (Sandbox Code Playgroud)
如果您想要一些特殊情况,例如必须验证deepLink,那么 RegEx 实践是最好的。
| 归档时间: |
|
| 查看次数: |
17344 次 |
| 最近记录: |