正则表达式验证端口号

Soh*_*pta 7 regex vb.net .net-2.0

我正在使用此正则表达式(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}来验证端口号.不知怎的,这不起作用.这有什么问题?任何人都可以指出我.

npi*_*nti 38

不工作到底是什么意思?

你可以尝试这样的事情:( ^([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])$这里获得).

这将确保任何给定的字符串是数字和范围之间065535.

假设你的正则表达式匹配相同的范围,它缺少开始和结束锚点(^$分别),所以它将允许除实际端口之外的其他字符串.

  • 第一部分(`[0-9] {1,4}`)错误地允许'0000`.应该是`[1-9] \\ d {0,3} | 0` (4认同)
  • 你好,接受 00 或 000 或 0000 的 @elfan 我无意中发现了这个条目,并意识到模式中有一个小错误:“修正你的正则表达式后:Port = '([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-3][0-9]|6553[0-5])'; // 1..65535" 此模式允许的范围为 1-65539,它应该是:Port = '([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..65535 https://github.com/findhit/proxywrap/issues/13 (2认同)

cht*_*i59 11

当我们在 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
Run Code Online (Sandbox Code Playgroud)

各种原因,为什么 Regex 不是正确的方法?

  • 代码可读性(需要几分钟才能理解)
  • 代码健壮性(有多种方法可以引入错别字,需要进行统一测试)
  • 代码灵活性(如果端口号可以扩展为 64 位数字怎么办!?)
  • 等等。 ...