我正在尝试验证Twitter网址,以便至少包含用户名。我不在乎它是否存在,只是有一个。
我正在使用以下javascript正则表达式
var re = new RegExp('((http://)|(www\.))twitter\.com/(\w+)');
alert(re.test('http://twitter.com/test_user'));
但它不起作用。
奇怪的是我在这个URL上创建并测试了上面的正则表达式
http://www.regular-expressions.info/javascriptexample.html
它的工作正常。
有什么想法吗?
由于
答案 0 :(得分:1)
function isTwitterHandle(handle) {
if (handle.match(/^((?:http:\/\/)?|(?:https:\/\/)?)?(?:www\.)?twitter\.com\/(\w+)$/i) || handle.match(/^@?(\w+)$/)) return true;
return false;
}
答案 1 :(得分:0)
您还需要转义转义序列中的反斜杠:
var re = new RegExp('((http://)|(www\\.))twitter\\.com/(\\w+)');
我会推荐这个正则表达式:
new RegExp('^(?:http://)?(?:www\\.)?twitter\\.com/(\\w+)$', 'i')
答案 2 :(得分:0)
这是因为您使用字符串文字定义正则表达式的方式。你需要转义转义字符(双反斜杠):
'^(http://)?(www\.)?twitter\.com/(\\w+)'
在上面,我也更改了开头,以便它匹配http://www.twitter.com/test_user
。
或者,使用RegExp文字语法,但这意味着您必须转义/
:
var re = /^http:\/\/)?(www\.)?twitter\.com\/(\w+)/;
答案 3 :(得分:0)
-http://twitter.com/username(这是http) -https://twitter.com/username(这是https) -twitter.com/username(不含http) - @ username(带@) -username(不带@)
var username = "@test";
var r1 = new RegExp('^((?:http://)?|(?:https://)?)?(?:www\\.)?twitter\\.com/(\\w+)$', 'i');
if (r1.test(username) == false) {
var r2 = new RegExp('^@?(\\w+)$', 'j');
if (r2.test(username) == true)
return true;
else
return false;
} else {
return true;
}