Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 444 Vote(s) - 3.51 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Dart / Flutter - Validating a string for URL

#1
I'm trying to create a system in which I can validate a string to check if it's a url or not. (https://www.google.com/)

I found the flutter package [validator][1] but this isn't dart 2 compatible, so won't be compatible with my code.

Similarly named, I also found the [validators][2] package but I can't seem to get it working correctly with my code, as it throws the following error; (hope you like my project name ;)

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)

If you could either find a fix for `validators` so that it doesn't throw this error and thus works correctly with my code, or suggest another method of validating a string to be URL compliant that would be great.

Thanks

**Edit** - My `pubspec.yaml` file

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



[1]:

[To see links please register here]

[2]:

[To see links please register here]

Reply

#2
For some reason, the `validators` package is requiring a pretty recent version of flutter's testing library rather than leaving it up to the application. Maybe there's a good reason for that (i.e. they're using a new feature).

The flutter engine internally requires a particular version of the flutter_test library (which is why it's generally a bad idea to specify a version of it). So to fix this you'll have to upgrade your flutter by running `flutter upgrade`. If you're already at the most recent version of the channel you're in, you may have to run `flutter channel dev` or `flutter channel master` to switch to a channel (branch really) that's updated more often.

I run on the `dev` branch/channel for the most part and while it very occasionally has problems, it doesn't happen a lot. I'd advise against using the master branch if possible though.
Reply

#3
To check Valid URL string you just have to use `Uri.parse()` like below.

bool _validURL = Uri.parse(_adVertData.webLink).isAbsolute;


Just check value of `_validURL`
Reply

#4
For RegExp, if you are going to find URL in a string, you can use this one.

r'^((?:.|\n)*?)((http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)([-A-Z0-9.]+)(/[-A-Z0-9+&@#/%=~_|!:,.;]*)?(\?[A-Z0-9+&@#/%=~_|!:‌​,.;]*)?)'

It can be used when you are highlighting URL in a string. For example in a chat app, you can highlight URL in a sent chat message.
This validates google.com, https://google.com, http://google.com all.
Reply

#5
Uri.tryParse(mystring)?.hasAbsolutePath ?? false;

Some example results:

| url | result |
| --- | --- |
| `'https://stackoverflow.com/questions/52975739/dart-flutter-validating-a-string-for-url'` | true |
| `asd` | false |
| `asd:asd` | false |
| `%EMPTY_STRING%` | false |
| `google.nl` | false |
| `https:` | false |
| `https://` | false |
| `https://a` | false |
| `https://a/` | true |
Reply

#6
Validation using **RegEx**

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;
}

Validation using **in-built** package

final Uri uri = Uri.tryParse(value);
if (!uri.hasAbsolutePath) {
return 'Please enter valid url';
}

If you want some special case like you have to validate **deepLink** then RegEx practice is best.
Reply

#7
I'm using this way to validate Urls. In your TextFormField's use this validator. here your url should be start from www.

validator: (website) {
String pattern =
r'^((?:.|\n)*?)((http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)([-A-Z0-9.]+)(/[-A-Z0-9+&@#/%=~_|!:,.;]*)?(\?[A-Z0-9+&@#/%=~_|!:‌​,.;]*)?)';
RegExp regExp = RegExp(pattern);
if (website.isEmpty) {
return "Please enter your website";
} else if (!(regExp.hasMatch(website))) {
return "Website Url must be started from www";
} else {
return null;
}
},
Reply

#8
TextEditingController urlController = TextEditingController();
String urlData = '';
static final GlobalKey<FormFieldState<String>> _orderFromkey =
GlobalKey<FormFieldState<String>>();



@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
resizeToAvoidBottomInset: false,

body: Column(
children: [
appBar(label: appName),
Padding(
padding: const EdgeInsets.all(8.0),
child: TextFormField(
key: _orderFromkey,
controller: urlController,
validator: (value) {
String patttern = r"((https?:www\.)|(https?:\/\/)|(www\.))[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9]{1,6}(\/[-a-zA-Z0-9()@:%_\+.~#?&\/=]*)?";
RegExp regExp = new RegExp(patttern);
if (!regExp.hasMatch(value!)) {
return 'Please enter valid URL';
}
},




decoration: InputDecoration(

fillColor: appColor,
labelText: "url",
labelStyle: new TextStyle(color: appColor),
contentPadding: EdgeInsets.only(left: 10, right: 10),
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: appColor),
),
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: black),
),
hintText: 'Enter Your URL'),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: InkWell(
onTap: () {
print('_orderFromkey: ${_orderFromkey}');
final FormFieldState<String>? form =
_orderFromkey.currentState;
if (form!.validate()) {
urlData = urlController.text;
Get.toNamed('/showQr', arguments: urlData);
print('text : ${urlData}');
} else {
// _autoValidation = true;
}
},
child: Container(
width: ScreenSize.size.width * 0.6,
height: ScreenSize.size.height * 0.1,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: appColor,
),
child: const Align(
alignment: Alignment.center,
child: Text(
'Submit',
style: TextStyle(
fontSize: 20,
color: white,
fontWeight: FontWeight.w700),
textAlign: TextAlign.center,
)),
),
),
),
],
)),
);

}
Reply

#9
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');


You can use RegExp too.
Reply

#10
I used the following method below. Depending on your rec, all valid URLs need to have a host (ex, google.com). If a URL does not have a host it returns an empty string (not undefined or null).

bool isURLValid = Uri.parse('https://google.com/').host.isNotEmpty;

Using .isAbsolute, as some have already reported, marks URLs such as 'http:' to be valid URLs which not.
Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through