为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式的东西

正则表达式的东西

C#
月关宝盒 2021-11-07 20:36:04
我想创建一个自定义的正则表达式。这将跟踪用户名的第一个字符应该是字母。后跟字母数字或最多可以出现一次特殊字符(-或_)。我可以检查用户名是否以字母开头,^[a-zA-Z]+$但不确定如何检查最多出现一次特殊字符。欢迎任何想法。谢谢
查看完整描述

2 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

根据我对您帖子的理解,您希望以下内容相匹配。


a-afdsafd

aafdsafd

aafdsa_fd

aafdsa-fd

aAfdsa-FD

以下不匹配:


aa-dsa-fd

aa-dsa_fd

-afdsafd

_afdsafd

尝试 /^[a-z](?:(?![a-z]+[\-_])[\-_])?[a-z]+(?:(?<![a-z]+[\-_])[\-_]?)[a-z]+?$/i

  1. 所述i改性剂能够不区分大小写匹配。

  2. ^$锚确保整个字符串我们正则表达式匹配。

  3. [a-z] 检查第一个字符是否是字母表。

  4. (?:(?![a-z]+[\-_])[\-_])?) 提前检查是否没有稍后使用的“特殊字符”,如果没有,我们可以选择匹配一个特殊字符。

  5. [a-z]+ 匹配一个或多个字母。

  6. (?:(?<![a-z]+[\-_])[\-_]?) 与 4 做同样的事情,只是它向后看。

  7. [a-z]+? 可选择匹配一个或多个字母。

https://regexr.com/3t86l

编辑:我注意到这aAfdsaFd_也应该匹配。以上与此不符。稍微修改@Wiktor Stribiżew 的评论,^[a-zA-Z][a-zA-Z0-9]*(?:[-_][a-zA-Z0-9]*)?$似乎适用于所有情况。这样更干净、更高效。所有功劳都归功于@Wiktor Stribiżew。


查看完整回答
反对 回复 2021-11-07
?
慕神8447489

TA贡献1780条经验 获得超1个赞

您可以匹配字符串开头的大写或小写字符^[a-zA-Z],匹配零次或多次字母数字[a-zA-Z0-9]*后跟可选的连字符或下划线[-_]?

最后匹配零次或多次字母数字,[a-zA-Z0-9]*$直到字符串结束。

^[a-zA-Z][a-zA-Z0-9]*[-_]?[a-zA-Z0-9]*$


查看完整回答
反对 回复 2021-11-07
  • 2 回答
  • 0 关注
  • 190 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信