这是为了验证我系统上的用户名。
每个用户名都可以包含这些符号“.-_”,但由上述符号分隔的单词不能只是数字。
一个例子是
无效的:
123.as-as123
123.AS-aS123
有效的:
a123.as-as123
A123.AS-aS123
这是为了验证我系统上的用户名。
每个用户名都可以包含这些符号“.-_”,但由上述符号分隔的单词不能只是数字。
一个例子是
无效的:
123.as-as123
123.AS-aS123
有效的:
a123.as-as123
A123.AS-aS123
如果我正确理解您的要求,我相信这将起作用:
/^(?:[a-z0-9]*[a-z][a-z0-9]*[.\-_])*[a-z0-9]*[a-z][a-z0-9]*$/i
它匹配零组或多组以 、 或 结尾并至少需要一个字母的字母.
/-
数字_
。然后它匹配最后一组字母/数字,至少需要一个字母。
它不区分大小写(这就是i
末尾的作用),因此它也将匹配大写。(这种语法至少在 Perl 和 PHP 中有效。在其他语言中,您可能必须以稍微不同的方式应用此选项,但始终可以使用不区分大小写的方法)。
有人可能会想像这样缩短它:
/^(?:[a-z0-9]*[a-z][a-z0-9]*[.\-_]?)+$/i
但是,这不太理想,因为将[.\-_]
其设为可选项会在尝试匹配的方式上提供了太多的灵活性。它可能必须在失败的模式上运行大量案例。
您可以使用这 4 个正则表达式进行检查。
^([0-9]*?)[\.\-\_] // Check if number is present between start and symbols
[\.\-\_]([0-9]*?)[\.\-\_] // Check if number is present between these symbols
[\.\-\_]([0-9]*)$ // Check if number is present between these symbols and eol
^([0-9]+)$ // Check only if number is present
如果其中任何一个的输出是 ne '',则打印无效,否则有效。