检查字符串是否有效 Waze Live Map link
Checking if a string is valid Waze Live Map link
我正在尝试从 Waze Live Map 检查字符串是否是有效的深度 link。 Waze Live Map 深 link 看起来像这样:
https://www.waze.com/ul?place=ChIJj61dQgK6j4AR4GeTYWZsKWw&ll=37.42199990%2C-122.08405750&navigate=yes
给定一个字符串,我想知道它是否是有效的 Waze 实时地图 link。最重要的是,我想知道它是否至少有经度和纬度。
我尝试了以下方法:
String str = 'https://www.waze.com/ul?place=ChIJj61dQgK6j4AR4GeTYWZsKWw&ll=37.42199990%2C-122.08405750&navigate=yes';
var wazeUrlPattern = r"https:\/\/www.waze.com\/ul\?ll\=(.)*([1-9]+\.[1-9]+)%2C([1-9]+\.[1-9]+)(.)?";
bool valid = new RegExp(wazeUrlPattern, caseSensitive:false).hasMatch(str);
if(!valid) {
print("The url is not valid waze live map link!");
return;
}
// Do something with the longitude and latitude and maybe other parameters
这对我不起作用,我需要一些帮助来解决问题。
你可以使用这个:
var wazeUrlPattern = r"https://www\.waze\.com/ul\?.*ll=[\d.-]+%2C[\d.-]+";
使用
https://www\.waze\.com/ul\?.*?&ll=(-?\d+\.\d+)%2C(-?\d+\.\d+)
转义点以匹配文字点,您有 ?ll
,而 URL 后面有 ?place
和 &ll=
。另外,经度和纬度前面可能有可选的-
。
解释
NODE EXPLANATION
--------------------------------------------------------------------------------
https://www 'https://www'
--------------------------------------------------------------------------------
\. '.'
--------------------------------------------------------------------------------
waze 'waze'
--------------------------------------------------------------------------------
\. '.'
--------------------------------------------------------------------------------
com/ul 'com/ul'
--------------------------------------------------------------------------------
\? '?'
--------------------------------------------------------------------------------
.*? any character except \n (0 or more times
(matching the least amount possible))
--------------------------------------------------------------------------------
&ll= '&ll='
--------------------------------------------------------------------------------
( group and capture to :
--------------------------------------------------------------------------------
-? '-' (optional (matching the most amount
possible))
--------------------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
\. '.'
--------------------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
) end of
--------------------------------------------------------------------------------
%2C '%2C'
--------------------------------------------------------------------------------
( group and capture to :
--------------------------------------------------------------------------------
-? '-' (optional (matching the most amount
possible))
--------------------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
\. '.'
--------------------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
) end of
您可以使用以下正则表达式:
https:\/\/www\.waze\.com\/ul\?.*?ll\=(\d+\.\d+)%2C-(\d+\.\d+)
详情
https:\/\/www\.waze\.com\/ul\?.*?\&
:匹配 url 直到 ll
参数
(\d+\.\d+)
: 数字和一个点字符的组合
%2C-
:字符间协调
试试这个正则表达式:
https:\/\/www\.waze\.com\/ul\?place=([^&]*)&ll=-?([1-9]\d*\.\d+)%2C-?([1-9]\d*\.\d+).*
为方便起见,您将安排在 $1(第 1 组)上,其余组将提供经度和纬度。
请检查demo here。
考虑不使用正则表达式。如果您首先将输入解析为 URI,您将获得规范化并且仍然可以查询各个部分:
bool isWazeDeepLink(String url) {
var parsedUrl = Uri.parse(url);
if (parsedUrl.isScheme("http") &&
parsedUrl.host == "www.waze.com" &&
parsedUrl.path == "/ul" &&
parsedUrl.queryParameters["ll"] != null) {
// Or check format of the `ll` parameter
return true;
}
return false;
}
您也可以使用 RegExp,但您应该考虑 scheme 和 host 字段不区分大小写, %2c
escape,但路径不是,所以你想要这样的东西:
var re = RegExp(r"^[hH][tT][tT][pP]://[wW]{3}\.[wW][aA][zZ][eE]\.[cC][oO][mM]"
r"/ul\?.*(?<=[?&])ll=(?:-?\d+(?:\.\d+))%2[C](?:-?\d+(?:\.\d+))(?:[&#]|$)");
这将在任何情况下匹配 http://www.waze.com/
,然后是小写的 ul
,然后是包含完整 URL 参数的任何后续字符串(前缀为 ?
og &
,后跟 &
、#
或结尾),其格式为 ll=
后跟数字,%2c
或 %2C
和另一个号码。
(或者您可以首先将输入解析为 URI,然后执行 toString
以获得 规范化 URI,然后此处建议的其他正则表达式将起作用以及)。
我正在尝试从 Waze Live Map 检查字符串是否是有效的深度 link。 Waze Live Map 深 link 看起来像这样:
https://www.waze.com/ul?place=ChIJj61dQgK6j4AR4GeTYWZsKWw&ll=37.42199990%2C-122.08405750&navigate=yes
给定一个字符串,我想知道它是否是有效的 Waze 实时地图 link。最重要的是,我想知道它是否至少有经度和纬度。
我尝试了以下方法:
String str = 'https://www.waze.com/ul?place=ChIJj61dQgK6j4AR4GeTYWZsKWw&ll=37.42199990%2C-122.08405750&navigate=yes';
var wazeUrlPattern = r"https:\/\/www.waze.com\/ul\?ll\=(.)*([1-9]+\.[1-9]+)%2C([1-9]+\.[1-9]+)(.)?";
bool valid = new RegExp(wazeUrlPattern, caseSensitive:false).hasMatch(str);
if(!valid) {
print("The url is not valid waze live map link!");
return;
}
// Do something with the longitude and latitude and maybe other parameters
这对我不起作用,我需要一些帮助来解决问题。
你可以使用这个:
var wazeUrlPattern = r"https://www\.waze\.com/ul\?.*ll=[\d.-]+%2C[\d.-]+";
使用
https://www\.waze\.com/ul\?.*?&ll=(-?\d+\.\d+)%2C(-?\d+\.\d+)
转义点以匹配文字点,您有 ?ll
,而 URL 后面有 ?place
和 &ll=
。另外,经度和纬度前面可能有可选的-
。
解释
NODE EXPLANATION
--------------------------------------------------------------------------------
https://www 'https://www'
--------------------------------------------------------------------------------
\. '.'
--------------------------------------------------------------------------------
waze 'waze'
--------------------------------------------------------------------------------
\. '.'
--------------------------------------------------------------------------------
com/ul 'com/ul'
--------------------------------------------------------------------------------
\? '?'
--------------------------------------------------------------------------------
.*? any character except \n (0 or more times
(matching the least amount possible))
--------------------------------------------------------------------------------
&ll= '&ll='
--------------------------------------------------------------------------------
( group and capture to :
--------------------------------------------------------------------------------
-? '-' (optional (matching the most amount
possible))
--------------------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
\. '.'
--------------------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
) end of
--------------------------------------------------------------------------------
%2C '%2C'
--------------------------------------------------------------------------------
( group and capture to :
--------------------------------------------------------------------------------
-? '-' (optional (matching the most amount
possible))
--------------------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
\. '.'
--------------------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
) end of
您可以使用以下正则表达式:
https:\/\/www\.waze\.com\/ul\?.*?ll\=(\d+\.\d+)%2C-(\d+\.\d+)
详情
https:\/\/www\.waze\.com\/ul\?.*?\&
:匹配 url 直到 ll
参数
(\d+\.\d+)
: 数字和一个点字符的组合
%2C-
:字符间协调
试试这个正则表达式:
https:\/\/www\.waze\.com\/ul\?place=([^&]*)&ll=-?([1-9]\d*\.\d+)%2C-?([1-9]\d*\.\d+).*
为方便起见,您将安排在 $1(第 1 组)上,其余组将提供经度和纬度。
请检查demo here。
考虑不使用正则表达式。如果您首先将输入解析为 URI,您将获得规范化并且仍然可以查询各个部分:
bool isWazeDeepLink(String url) {
var parsedUrl = Uri.parse(url);
if (parsedUrl.isScheme("http") &&
parsedUrl.host == "www.waze.com" &&
parsedUrl.path == "/ul" &&
parsedUrl.queryParameters["ll"] != null) {
// Or check format of the `ll` parameter
return true;
}
return false;
}
您也可以使用 RegExp,但您应该考虑 scheme 和 host 字段不区分大小写, %2c
escape,但路径不是,所以你想要这样的东西:
var re = RegExp(r"^[hH][tT][tT][pP]://[wW]{3}\.[wW][aA][zZ][eE]\.[cC][oO][mM]"
r"/ul\?.*(?<=[?&])ll=(?:-?\d+(?:\.\d+))%2[C](?:-?\d+(?:\.\d+))(?:[&#]|$)");
这将在任何情况下匹配 http://www.waze.com/
,然后是小写的 ul
,然后是包含完整 URL 参数的任何后续字符串(前缀为 ?
og &
,后跟 &
、#
或结尾),其格式为 ll=
后跟数字,%2c
或 %2C
和另一个号码。
(或者您可以首先将输入解析为 URI,然后执行 toString
以获得 规范化 URI,然后此处建议的其他正则表达式将起作用以及)。