这用于验证我系统上的用户名。
每个用户名都可以包含这些符号“。-_”,但由上述符号分隔的单词不能只是数字。
一个例子是
无效:
123.as-as123
123.AS-aS123
有效:
a123.as-as123
A123.AS-aS123
答案 0 :(得分:2)
如果我理解你的要求,我相信这会有效:
/^(?:[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
然而,这是不太理想的,因为使[.\-_]
可选使其在尝试匹配的方式上具有太大的灵活性。它可能必须在失败的模式上运行大量案例。
答案 1 :(得分:0)
您可以使用这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
如果其中任何一个的输出是'',则打印无效,否则有效。