使用Javascript进行域验证的Regex
Regex for domain verification with Javascript
我想创建一个正则表达式来验证域名。
我在StackOverflow上搜索了很多,找到了这个解决方案,它忽略了http和文件夹,只检查域。
报价
var pattern = new RegExp('^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:'.[a-zA-Z]{2,})+$', 'i');
但由于我不是巫师,而且我很久以前就放弃了理解Regex,所以我把它放在Regex101上,这表明'localhost'不匹配。问题是当我执行以下代码时(这里是jsFiddle):
var origin = 'localhost';
var pattern = new RegExp('^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:'.[a-zA-Z]{2,})+$', 'i');
console.log(origin, pattern.test(origin));
它返回true(不应匹配localhost)。为什么?
编辑:出于某种原因,人们认为我希望localhost被识别为一个域但恰恰相反如果你读了这个问题,你会发现它返回了true,尽管它应该返回false。
在Regex101中,您输入的是一个文本regex,而不是字符串。由于您的正则表达式是正确的,所以localhost不匹配。然而,在您的代码中,您使用字符串创建正则表达式(这是个坏主意),这意味着您必须转义每个反斜杠。
您可以使用Regexp文字来防止这个问题,这里有一个jsFiddle。
只需使用带有正斜杠的原始正则表达式,即
var pattern = /^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:'.[a-zA-Z]{2,})+$/i;
或者只是转义反斜杠:http://jsfiddle.net/theonlygusti/o6yL2w1f/2/
var pattern = new RegExp('^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:''.[a-zA-Z]{2,})+$', 'i');
相关文章:
- 使用regex的jquery keydown绑定不会验证撇号和句点
- 制作一个regex来验证只有一个数字的字符串
- Javascript/RegEx未验证HTML表单
- Regex用于年龄验证,仅使用Javascript接受0-200岁之间的年龄
- Unix文件的Regex验证
- 为什么regex只验证字段中的一个字符,而不是所有输入的字符
- 使用angularJs ng模式进行10位Regex验证
- Regex表达式无法用于密码验证
- regex表达式不适用于验证信用卡到期信息
- 通过HTML验证(RegEx)在电子邮件中验证域
- JavaScript日期验证RegEx或JS
- JQuery验证Regex密码验证
- URL验证REGEX-URL仅对http://有效
- 语义UI表单验证RegEx与mm/dd/yyyy日期不匹配
- JQuery验证Regex规则不起作用
- 邮件验证RegEx用户名/本地名称长度检查未运行
- MVC验证regex属性在c#中工作,但在JavaScript中不工作
- 用最小长度和新行验证Regex
- 表单验证regex和DOM:在表单验证中实现regex的最佳方式是什么?
- 想要url验证regex