繁体   English   中英

用于验证用户名的正则表达式?

[英]Regular expression for validating a username?

我仍然有点使用正则表达式,所以这是我的困境。 我有一些可接受的用户名规则,我正在尝试为它们制作表达式。

他们来了:

  • 1-15个字符
  • az,AZ,0-9和空格是可以接受的
  • 必须以az或AZ开头
  • 不能在一个空间结束
  • 连续不能包含两个空格

就我而言,这就是我的意思。

/^[a-zA-Z]{1}([a-zA-Z0-9]|\s(?!\s)){0,14}[^\s]$/

它在很大程度上起作用,但不匹配单个字符,例如“a”。

有人可以帮我从这里出去吗? 我在PHP中使用PCRE,如果这有任何区别。

试试这个:

/^(?=.{1,15}$)[a-zA-Z][a-zA-Z0-9]*(?: [a-zA-Z0-9]+)*$/

先行断言(?=.{1,15}$)检查长度,其余检查结构:

  • [a-zA-Z]确保第一个字符是字母字符;
  • [a-zA-Z0-9]*允许任意数量的以下字母数字字符;
  • (?: [a-zA-Z0-9]+)*允许任何数量的一个单一的空间的序列(未的\\s ,允许任何空白字符),必须遵循通过至少一个字母数字字符(参见用于PCRE子模式 (?:…)语法

您还可以删除前瞻断言并使用strlen检查长度。

你的正则表达式的主要问题是它需要至少两个字符两个匹配:

  • 一个用于[a-zA-Z]{1}部分
  • 一个用于[^\\s]部分

除了这个问题,我看到你的正则表达式的一些部分可以改进:

  • [^\\s]类将匹配任何字符,空格除外:将接受点或分号,尝试使用[a-zA-Z0-9]类来确保字符是正确的。
  • 您可以删除{1}开头部分,正则表达式将匹配在默认情况下只有一个角色

在你的第一个角色可选后做一切

^[a-zA-Z]?([a-zA-Z0-9]|\s(?!\s)){0,14}[^\s]$

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM