JavaScript验证SSID和WPA/WPA2

4

我正在尝试让两个函数对SSID和WPA2密码进行验证。

function isValidSSID(ssid) {
    return (regex)
}

并且
function isValidWPA(passcode) {
    return (regex)
}

我希望你能为每个正则表达式找到合适的字符:

SSID可以由最多32个区分大小写的字母数字字符组成。 第一个字符不能是!,#或;字符。 +,],/,",TAB和尾随空格是SSID的无效字符。

WPA: https://superuser.com/questions/223513/what-are-the-technical-requirements-for-a-wpa-psk-passphrase

谢谢, 唐

更新:

对我有效的SSID函数:

function isValidSSID(str) { return /^[!#;].|[+\[\]/"\t\s].*$/.test(str); }

我使用了这个网站:https://regex101.com/r/ddZ9zc/2/ 对我有效的WPA功能是:
 function isValidWPA(str) { return /^[\u0020-\u007e\u00a0-\u00ff]*$/.test(str); }

JavaScript中可打印字符的正则表达式

我已在JavaScript的其他地方进行过长度检查。

谢谢!


1
你需要提供输入和期望输出的示例(通过/失败),并自己尝试一下。人们在这里是来帮助你学习,而不是替你完成工作。除非你愿意按小时支付费用。 - user5684647
这里有我漏掉的问题吗? - user7627726
自己解决了。 - Don E.
@ Don E.:你能分享一下吗?:) - xinthose
1
https://github.com/cyoung/stratux/blob/ec997fbf98a27ef53002dc4207ae7d22bbb409a6/web/plates/js/settings.js#L310 - Don E.
5个回答

5
我使用这个正则表达式来匹配SSID:
^[^!#;+\]\/"\t][^+\]\/"\t]{0,30}[^ !#;+\]\/"\t]$|^[^ !#;+\]\/"\t]$

5

我使用Andrey的答案来得到这个:

^[^!#;+\]\/"\t][^+\]\/"\t]{0,30}[^ +\]\/"\t]$|^[^ !#;+\]\/"\t]$[ \t]+$

SSID可以由最多32个区分大小写的字母数字字符组成。第一个字符不能是!, #或;。+,],/,",TAB和尾随空格都是SSID无效的字符。

使用Andrey提供的正则表达式,您根本不能在字符串中使用!,#或;,但上面的文本指定它们只能不在字符串开头使用。


1
这是一个答案,但也是一个问题 - 有没有人在SSID中使用外语或图形的经验?
我找到了以下内容:

在SSID中使用Emoji 但是,如果您深入研究Wi-Fi的管理标准,即由电气和电子工程师学会(IEEE)维护的802.11标准,您会发现令人惊讶的事情:设置无线网络的SSID的唯一限制是它必须介于1个和32个八位字节之间,其中一个八位字节是8位数据。

截至Unicode 14.0,有144,697个字符,包括数百种语言和成千上万个表情符号的字符。有趣的是,表情符号是2个八位字节,而不是像字符A或数字2那样的单个八位字节。[外语字母也是如此 - 每个字母需要2个八位字节。]
因此,您的SSID中的每个表情符号都算作两个常规纯文本字符 - 您可以拥有一个包含16个表情符号的SSID,一个包含单个表情符号的30个纯文本字符的SSID,或者任何两者之间的组合,总共加起来为32个八位字节。

0

对 Sparers 优秀版本的轻微改进,我注意到在为 freeradius 服务制作某些内容时,当它插入分组时可以跨越换行符进行匹配... 尽管这个版本有其他缺点,但不能这样做:

([^!#;+\]\/"\t\n][^+\]\/"\t\n]{0,30}[^ +\]\/"\t\n]|^[^ !#;+\]\/"\t\n][ \t]+)$

0

对于SSID,我会使用这个正则表达式(不包括零长度的情况):

/^[^!#;+\]/"\t][^+\]/"\t]{0,31}$/

对于WPA密码(8到63个可打印ASCII字符,编码范围从32到126):

/^[\u0020-\u007e]{8,63}$/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接