我正在使用以下内容来验证URL是否有效格式化:
validates_format_of :website, :with => URI::regexp(%w(http https))
Run Code Online (Sandbox Code Playgroud)
但是,当url不以http://或开头时,它不起作用https://.是否有一些类似的方法来验证带有URI::regexp(或URI)的URL 并使其包含不以http://?开头的有效URL ?(例如,www.google.com有效,原样http://www.google.com)
我确信这很简单,但我无法理解.我正在尝试将defaultScheme设置为我的模型中的Yii URL验证器,以便它接受像www.something.com和http://www.something.com这样的地址.
为此,我使用以下代码:
...
array('website', 'url', 'defaultScheme' => 'http://'),
...
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用,我在尝试更新时仍然得到"网站不是有效的URL"错误.我究竟做错了什么?
String[] schemes = {"http","https"};
UrlValidator urlValidator = new UrlValidator(schemes, UrlValidator.ALLOW_ALL_SCHEMES);
System.out.println(urlValidator.isValid(myUrl));
Run Code Online (Sandbox Code Playgroud)
以下网址说,无效。任何人都知道为什么。本地网络是一个本地网络。但这适用于任何其他公共网络(似乎)。
http://aunt.localnet/songs/barnbeat.ogg
Run Code Online (Sandbox Code Playgroud) public class UrlVarificationTask extends AsyncTask<Void, Void, Integer> {
private String url;
private UrlVarificationDelegate delegate;
private HttpURLConnection huc;
public UrlVarificationTask(String url, UrlVarificationDelegate delegate) {
this.url = url;
this.delegate = delegate;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Integer doInBackground(Void... params) {
int responseCode = 0;
try {
System.setProperty("http.keepAlive", "false");
URL u = new URL(url);
huc = (HttpURLConnection) u.openConnection();
huc.setRequestMethod("HEAD");
huc.connect();
responseCode = huc.getResponseCode();
} catch (MalformedURLException mal) {
responseCode = -555;
} catch (IOException io) {
responseCode = …Run Code Online (Sandbox Code Playgroud) 我想在java中检查验证URL是否允许使用通配符.
我找到了一些关于在java中验证URL的好例子(REGEX,urlValidator),但是那些没有提供通配符.
这是我正在练习的内容:
CODE(urlValidator)
public void urlValidiTest(){
System.out.println(this.urlCheck("https://www.google.com"));
System.out.println(this.urlCheck("https://google.com"));
System.out.println(this.urlCheck("*.com"));
}
public boolean urlCheck(String url){
return new UrlValidator().isValid(url);
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT
真正
真正
假
CODE(正则表达式)
public void regexTest() {
String[] URLs = new String[] { "http://www.google.com", "http://google.com/","*.com" };
Pattern REGEX = Pattern.compile("(?i)^(?:(?:https?|ftp)://)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))\\.?)(?::\\d{2,5})?(?:[/?#]\\S*)?$");
for (String url : URLs) {
Matcher matcher = REGEX.matcher(url);
if (matcher.find()) {
System.out.println(matcher.group());
}
}
}
Run Code Online (Sandbox Code Playgroud)
结果
我想要做的是以上所有URL都有效.
我该如何解决这个问题呢?
任何评论将不胜感激.谢谢.
更新
我摆脱了方案部分,并在答案之后的域部分添加了|*和| \.*(|*和|.*给了我一个错误 - 无效的转义序列(有效的是\ b\t \n\f\r \n \"\') - 但我不确定更改是否正确).
现在它不允许"google.com"; …
我目前正在使用以下正则表达式来验证 URL:
^(?#Protocol)(?:(?:ht|f)tp(?:s?)\:\/\/|~\/|\/)?(?#Username:Password)(?:\w+:\w+@)? (?#Subdomains)(?:(?:[-\w]+\.)+(?#TopLevel Domains)(?:com|org|net|gov|mil|biz|edu|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?#Port)(?::[\d]{1,5})?(?#Directories)(?:(?:(?:\/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|\/)+|\?|#)?(?#Query)(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:&(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(?#Anchor)(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)?$
Run Code Online (Sandbox Code Playgroud)
我从网络上的某个地方借用了这个(不记得在哪里)来改进这一点:
^((https?|file|ftp|gopher|news|nntp):\/\/)([a-z]([a-z0-9\-]*\.)+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel)|(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))(\/[a-z0-9_\-\.~]+)*(\/([a-z0-9_\-\.]*)(\?[a-z0-9+_\-\.%=&]*)?)?(#[a-z][a-z0-9_]*)?$
Run Code Online (Sandbox Code Playgroud)
但是,这些都无法验证此 url(应该是有效的):
http://somedomain.com/users/1234/images/Staff%20Photos%202008/FirstName%20LastName_1%20(Small).jpg
Run Code Online (Sandbox Code Playgroud)
问题在于 %20 和圆括号 ()。尽我所能,我无法使用上面的任何一个正则表达式来正确验证上面的 url,而不会破坏其他内容。我没有编写花哨的正则表达式的经验,所以这也没有帮助。我发现的所有其他网络结果都因愚蠢的事情而失败,例如:
http://www.test..com
Run Code Online (Sandbox Code Playgroud)
如有帮助,将不胜感激。
我已经试过验证URL以便在我的代码中发送到服务,任何人都可以给我正则表达式来验证应该以http://开头的URL,并且应该以.com,.org,.net,.edu,.in 结尾.url.i中的其他一些常见结局已搜索了很多,但我得到了准确的这种类型正则表达式.请帮助我.提前致谢.
我org.apache.commons.validator.UrlValidator用来验证URL.对于http://www.google.com,它返回true,但对于www.google.com 则为false
我也想允许www.google.com.我将ALLOW_ALL_SCHEMES应用为参数,但它不起作用.如何自定义UrlValidator,使其返回true为www.google.com和http://localhost:8282/GFEReporting也.有没有办法定制这个,所以它可以采取所有方案,没有方案?请告诉我.
或者还有其他方法吗?
提前致谢...
所以我正在使用 Commons UrlValidator (org.apache.commons.validator.routines.UrlValidator),我想知道是否有一种方法可以自定义它允许的域。现在似乎只允许 TLD,但我希望有一两个有效的名称不在该列表中,例如“.corp”(列表可在此处找到:http://data.iana.org/TLD/tlds-alpha -by-domain.txt)。是否有一种设置或解决方法,以便我不必创建自己的 url 验证器,并且可以将其与添加的域一起使用?
斯威夫特 5、Xcode 10、iOS 12
我的代码用于UIApplication.shared.canOpenURL验证 URL,不幸的是没有“http://”就失败了。
例子:
print(UIApplication.shared.canOpenURL(URL(string: "stackoverflow.com")!)) //false
print(UIApplication.shared.canOpenURL(URL(string: "http://stackoverflow.com")!)) //true
print(UIApplication.shared.canOpenURL(URL(string: "129.0.0.1")!)) //false
print(UIApplication.shared.canOpenURL(URL(string: "ftp://129.0.0.1")!)) //true
Run Code Online (Sandbox Code Playgroud)
我知道方案(iOS9+)的变化,我知道如果字符串尚未以“http://”开头,我可以添加前缀,然后检查这个新字符串,但我仍然想知道:
问题:我如何添加“没有方案”方案,以便像“stackoverflow.com”这样的有效 URL 也返回true(这是否可能?)?
我想在客户端和服务器端验证中,在jquery和PHP中验证以下类型的url。
我已经创建了正则表达式来验证jQuery中的URL
^(http:\/\/www.|https:\/\/www.|ftp:\/\/www.|www.){1}([0-9A-Za-z]+\.)
Run Code Online (Sandbox Code Playgroud)
但是它不能验证URL http://en.wikipedia.org/wiki/Great_Wall_of_China并给出错误。
请帮忙
谢谢!
我试图找到一个正则表达式,将尽可能多的URL验证.我在MVC3的输入字段中使用它:
[RegularExpression(@"expression...")]
Run Code Online (Sandbox Code Playgroud)
我发现这个正则表达式 - "diegoperini",我喜欢它,但我不知道如何将它从php转换为.net版本:
_^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})
(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})
(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])
(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))
|(?:(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)(?:\.
(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)*
(?:\.(?:[a-z\x{00a1}-\x{ffff}]{2,})))(?::\d{2,5})?(?:/[^\s]*)?$_iuS
Run Code Online (Sandbox Code Playgroud)
它看起来如何?
我想检查用户插入的 URL 是否有效。我有不同的情况允许用户插入 URL
1) www.test.com (valid)
2) http://test.com (valid)
3) http://www.test.com (valid)
4) www.test (not valid)
Run Code Online (Sandbox Code Playgroud)
所以这种方式用户将能够插入www或http,如果用户只插入,www则http://在 URL 之前预先附加。我发现了很多正则表达式,但他们严格检查http://.
提前致谢。