我正在使用此正则表达式(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3}
来验证端口号。不知怎的,这不起作用。这有什么问题?任何人都可以指出我。
答案 0 :(得分:35)
不工作究竟是什么意思?
你可以尝试这样的事情:^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$
(从here获得)。
这将确保任何给定的字符串都是数字,且在0
和65535
之间。
假设您的正则表达式匹配相同的范围,它缺少开始和结束锚点(分别为^
和$
),因此它将允许除实际端口之外的其他字符串。
答案 1 :(得分:3)
Number()是你想要的功能“123a”返回NAN
parseInt()截断尾随字母“123a”返回123
<input type="text" id="txtFld" onblur="if(Number(this.value)>0 && Number(this.value)<65536){alert('valid port number');}" />
答案 2 :(得分:2)
npinti的回答是不对的。例如,它不允许输入端口号1000。对我来说,这个(不好,我是初学者)可以正常工作:
/^((((([1-9])|([1-9][0-9])|([1-9][0-9][0-9])|([1-9][0-9][0-9][0-9])|([1-6][0-5][0-5][0-3][0-5])))))$/
答案 3 :(得分:2)
这是单端口正则表达式验证,它排除以0开头的端口
^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])
这是端口范围的验证(例如1111-1111)
^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])(-([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$
链接:
答案 4 :(得分:2)
"^((6553[0-5])|(655[0-2][0-9])|(65[0-4][0-9]{2})|(6[0-4][0-9]{3})|([1-5][0-9]{4})|([0-5]{0,5})|([0-9]{1,4}))$"
它将允许0-65535之间的所有内容。
答案 5 :(得分:1)
更严格的方法是使正则表达式匹配所有数字,最多5位数 使用以下字符串:
*(^[1-9]{1}$|^[0-9]{2,4}$|^[0-9]{3,4}$|^[1-5]{1}[0-9]{1}[0-9]{1}[0-9]{1}[0-9]{1}$|^[1-6]{1}[0-4]{1}[0-9]{1}[0-9]{1}[0-9]{1}$|^[1-6]{1}[0-5]{1}[0-4]{1}[0-9]{1}[0-9]{1}$|^[1-6]{1}[0-5]{1}[0-5]{1}[0-3]{1}[0-5]{1}$)*
答案 6 :(得分:1)
不幸的是,我们何时在Google上搜索“如何验证端口号”
但是(除非您真的没有其他选择...)
正则表达式显然不是验证端口号的方法!
“一个”(稍微好一点)的方式可能是:
step 1: Convert your string into number, and return FALSE if it fails
step 2: return TRUE if your number is in [1-65535] range, and FALSE otherwise
各种原因,为什么Regex不是正确的方式?
答案 7 :(得分:1)
这是我用来验证防火墙端口设置的示例。原始答案将匹配2个字符串。我只能有1个字符串匹配项。
(6553[0-5]|655[0-2][0-9]|65[0-4][0-9][0-9]|6[0-4][0-9][0-9][0-9][0-9]|[1-5](\d){4}|[1-9](\d){0,3})
要获得:22,24:100,333,678,100:65535
我的完整验证(只会返回1个匹配项)
(6553[0-5]|655[0-2][0-9]|65[0-4][0-9][0-9]|6[0-4][0-9][0-9][0-9][0-9]|[1-5](\d){4}|[0-9](\d){0,3})(:(6553[0-5]|655[0-2][0-9]|65[0-4][0-9][0-9]|6[0-4][0-9][0-9][0-9][0-9]|[1-5](\d){4}|[0-9](\d){0,3}))?(,(6553[0-5]|655[0-2][0-9]|65[0-4][0-9][0-9]|6[0-4][0-9][0-9][0-9][0-9]|[1-5](\d){4}|[0-9](\d){0,3}){1}(:(6553[0-5]|655[0-2][0-9]|65[0-4][0-9][0-9]|6[0-4][0-9][0-9][0-9][0-9]|[1-5](\d){4}|[0-9](\d){0,3}))?)*
答案 8 :(得分:1)
^((6553[0-5])|(655[0-2][0-9])|(65[0-4][0-9]{2})|(6[0-4][0-9]{3})|([1-5][0-9]{4})|([0-5]{0,5})|([0][0-9]{1,4})|([0-9]{1,4}))$
我已经用 Junit 测试了上面的正则表达式,从 0-65535 运行 for 循环
例如:00001 - 65535 带前导零 1 - 65535 没有前导零 例如:====
(6553[0-5])
: 65530-65535(655[0-2][0-9])
: 65500-65529(65[0-4][0-9]{2})
:65000-65499(6[0-4][0-9]{3})
: 60000-64999([1-5][0-9]{4})
: 10000-59999([0-5]{0,5})
: 00000-55555(用于前导零)([0][0-9]{1,4})
: 00000-09999(用于前导零)([0-9]{1,4})
: 0000-9999(用于前导零)答案 9 :(得分:0)
@npinti的答案允许端口号中的前导零,端口0表示选择任何可用的端口,所以我将其排除,以便正则表达式成为
^([1-9][0-9]{0,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$
如果你想允许端口0,那么
^(0|[1-9][0-9]{0,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$
答案 10 :(得分:0)
解决方案:
Dim Minlenght As Integer = 1
Dim Maxlenght As Integer = 65536
Regex.IsMatch(sInput,"(^\d{0},{1}$)", "{" + Minlenght, Maxlenght + "}")
答案 11 :(得分:0)
如果变量是1到65536(含)之间的整数,则...
transform
答案 12 :(得分:0)
也登陆这里,专门搜索 REGEX 以验证端口号。 我看到批准的解决方案尚未修复以涵盖所有场景(例如:007 端口等),并且来自其他站点的解决方案也未更新 (eg)。
达到与 saber tabatabaee yazdi
相同的最小解,应该正确覆盖 1-65535
范围:
^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$
享受吧!