Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 要验证端口号的正则表达式_Regex_Vb.net_.net 2.0 - Fatal编程技术网

Regex 要验证端口号的正则表达式

Regex 要验证端口号的正则表达式,regex,vb.net,.net-2.0,Regex,Vb.net,.net 2.0,我正在使用这个正则表达式来验证端口号。不知何故,这不起作用。有什么问题吗?有人能指出我吗。你不起作用到底是什么意思 你可以这样做:^([0-9]{1,4}{124;[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和65535之间 假设正则表达式匹配相同的范围,它缺少起始和结束锚(^和$),因此它将允许实际端口之外的其他字符串。Number()是您希望“1

我正在使用这个正则表达式来验证端口号。不知何故,这不起作用。有什么问题吗?有人能指出我吗。

你不起作用到底是什么意思

你可以这样做:
^([0-9]{1,4}{124;[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
65535
之间

假设正则表达式匹配相同的范围,它缺少起始和结束锚(
^
$
),因此它将允许实际端口之外的其他字符串。

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');}" />


更严格的方法是让正则表达式匹配所有数字(最多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}$)*

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][0-5]))$/
@npinti的答案允许在端口号中前导零,并且端口0意味着选择任何可用端口,因此我将排除,以便regex变为

^([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])$

这里是单端口正则表达式验证,它排除以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-1-9][0-9[0-1-9[0-1-9[0-9[0-1-9[0-9[0-4[0-4[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-5[0-9[0-9[0-9[0-9[0-4[0-4[0-4[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0[0-9[0-9[0-9[0)?$

链接:

它将允许0-65535(含0-65535)之间的所有内容。

解决方案:

Dim Minlenght As Integer = 1
Dim Maxlenght As Integer = 65536

Regex.IsMatch(sInput,"(^\d{0},{1}$)", "{" + Minlenght, Maxlenght + "}")
当我们在谷歌上搜索“如何验证端口号”时,不幸的是我们在这里登陆了

但是(除非你真的别无选择…)

Regex显然不是验证端口号的方法!

“一个”(稍微好一点)的方法可能是:

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
各种原因,为什么正则表达式不是正确的方法?

  • 代码可读性(需要几分钟才能理解)
  • 代码稳健性(有多种方法引入打字错误,需要进行统一测试)
  • 代码灵活性(如果端口号可以扩展到64位的话会怎么样!)
  • 等等

以下是我用来验证防火墙端口设置的示例。原始答案将匹配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][1-5](\d){4}[1-9](\d){0,3})

要获得:
22,24:100333678100:65535
我的完整验证(只返回1个匹配项)是


如果变量是介于1和65536(含)之间的整数,则


也在这里登陆,专门搜索REGEX来验证端口号。 我看到批准的解决方案还没有固定到涵盖所有场景(例如:007端口和其他),其他站点的解决方案也没有更新()

达到了与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])$


享受吧!

你想做什么?可能会发布一些失败的单元测试代码或其他东西?你希望2验证什么端口号..它们是在特定范围内还是只需要2validate@Fake.It.Til.U.Make.It我只想验证从1到65535的值。@SohamDasgupta在这里不需要使用正则表达式。只需将数字解析为int,然后是check,如果它在要求的范围内!我正在使用DexExpress textbox,并使用此正则表达式作为掩码。但在运行时,它会生成一个错误,表示语法不正确。@SohamDasgupta:也许您需要将所有内容都放在引号之间?也许查看文档会有所帮助。放qoutes是我10年前开始编程时学到的东西。Anyway谢谢。第一部分(
[0-9]{1,4}
)错误地允许
0000
。应该是
[1-9]\\d{0,3}0
Hi,@elfan接受00或000或0000,我意外地发现了这个条目,并意识到模式中有一个小错误:“在更正您的regexp:Port=”([1-9][0-9]{0,3}[1-5][0-9]{0-9}6[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}[0-5][0-5]“;//1..65535我非常喜欢这个答案的意图,因为我现在有完全相同的问题。请注意,您的主要区别是第一个捕获组允许
[1-9][0-9]{0,4}
,但这意味着像99999这样的数字可以进入,这违反了问题。我将继续尝试,看看是否可以找到对此的更正。我想你是想使用
[1-9][0-9]{0,3}
?这将包括1-9999,但不允许前导零。太晚了:),但这显然是错误的。你可以用“2e2”测试它例如
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
(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}))?)*
if [[ "$port" =~ ^[0-9]+$ && $port -ge 1 && $port -le 65536 ]]; then