首页 > 解决方案 > 正则表达式匹配字母和数字,其中一些符号可以出现在它们之间

问题描述

我正在尝试创建一个正则表达式来匹配字母和数字,其中.-可以_出现在它们之间。

  1. 有效匹配示例:“stephan”、“mike03”、“s.johnson”、“st_steward”、“john-johnson”、“12345”、“324_231351231”。
  2. 无效用户示例:''--123"、"....."、"john_-"、"_steve"、".info"。

我想出了这个表达

[A-Za-z0-9.\-_]+

但它也会匹配那些stefan_johnson_不应该匹配的东西,因为_它只能出现在字母和数字之间。如果我们在开头有_或任何其他已经提到的符号,情况也是如此。

标签: c#regex

解决方案


您可以使用

^[A-Za-z0-9]+(?:[._-][A-Za-z0-9]+)*$

请参阅正则表达式演示详情

  • ^- 字符串的开始
  • [A-Za-z0-9]+- 一个或多个 ASCII 字母或数字
  • (?:[._-][A-Za-z0-9]+)*- 零次或多次出现
    • [._-]- 一个._-
    • [A-Za-z0-9]+- 一个或多个 ASCII 字母或数字
  • $- 字符串结束。

结果可能你需要支持任何 Unicode 字母或数字,然后使用

^[\p{L}\p{N}]+(?:[._-][\p{L}\p{N}]+)*$

where\p{L}匹配任何 Unicode(基本)字母并\p{N}匹配任何 Unicode 数字。

如果您不想允许尾随(换行)字符,请替换$为。\z\n

另外,请参阅我的使用逗号分隔值验证字符串(没有前导/尾随分隔符) ” YT 视频,解释这种验证技术。


推荐阅读