【问题标题】:How to correctly match a variable against an IPv4 regex如何正确匹配变量与 IPv4 正则表达式
【发布时间】:2017-03-08 16:51:26
【问题描述】:

我是 JavaScript 新手,正在尝试创建一个简单的函数来检查变量是否是有效的 IPv4 地址。

目前,我只是在尝试使用 online tool 的代码。

我从 stackexchange 复制了正则表达式并尝试将其与硬编码变量进行匹配,但在线编辑器声称它是无效的 JavaScript 代码。

ip='127.0.0.1';

if (ip.match(^([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$){
    alert('IPv4');
}
else{
    alert('no IPv4');
}

如何正确检查静态变量是否为带有正则表达式的有效 IPv4 地址?

【问题讨论】:

    标签: javascript regex match


    【解决方案1】:

    你必须用分隔符包围正则表达式:

    if (ip.match(/^([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$/)){
    //    here __^                                                                                                                                                     and here __^
    

    您可以使用量词来减少正则表达式的长度:

    if (ip.match(/^([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])(\.[01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]){3}$/)) {
    

    【讨论】:

    • 当使用正则表达式文字语法时,点转义应该只是\.。当使用字符串语法 ("regex") 那么是的,点转义将是 \\.
    • 谢谢,我知道正则表达式可能需要分隔,但是当我用我的 if 语句替换您的 if 语句时,根据我在 OP 中提到的网站,我仍然得到无效的 JavaScript 代码.
    • 我相信没有关闭 ),不过就是这样 - 感谢您的回答!
    猜你喜欢
    • 2015-07-06
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    相关资源
    最近更新 更多