1

我尝试创建一个正则表达式来匹配所有字符串的 大小写和长度限制为的符号A-Zdigits@#$_4 to 16

我没用的正则表达式:
/^([a-zA-Z])|(\d)|(@#\$_){4,16}$/

我测试在线正则表达式生成器,例如http://www.jslab.dk/tools.regex.php但没有一个好的结果。

4

3 回答 3

5

您的正则表达式/^([a-zA-Z])|(\d)|(@#\$_){4,16}$/匹配单个字母或单个数字或 4 到 16 个字符的“@#\$_”。

替代方案周围的团体是无用的。

一种解决方案是围绕整个交替组

/^([a-zA-Z]|\d|@#\$_){4,16}$/

但更好的解决方案是将所有内容添加到一个字符类中

/^[a-zA-Z@#$_\d]{4,16}$/

在 Regexr 上查看

您也许可以进一步简化它,因为[a-zA-Z\d_]它与\w, when\w不是基于 unicode 的相同!

/^[\w@#$]{4,16}$/
于 2013-03-10T15:08:50.533 回答
1

\w包括小写和大写字母、数字和_字符

正则表达式模式:^[\w@\#\$]{4,16}$

在这里解释演示:http ://regex101.com/r/rK1yH2

于 2013-03-10T15:07:00.820 回答
0

您需要的表达式是这个:

( ([a-zA-Z])|(\d)|(@#\$_) ){4,6}

您遇到的问题是最后一个 {2,6} 仅影响最后一组括号,而不影响整个表达式。还要确保“/^”和“$/”对于您的情况是强制性的,因为“^”的意思是“不是”,所以我不确定你为什么在那里有它。

您还可以在此处以图形方式查看它:http: //www.debuggex.com/

于 2013-03-10T15:08:44.660 回答