正则表达式匹配字母和数字,其中一些符号可以出现在它们之间
Posted
技术标签:
【中文标题】正则表达式匹配字母和数字,其中一些符号可以出现在它们之间【英文标题】:Regular expression to match letters and digits, where some symbols can appear between them 【发布时间】:2021-10-28 06:54:54 【问题描述】:我正在尝试创建一个正则表达式来匹配字母和数字,其中.
、-
和_
可以出现在它们之间。
-
有效匹配示例:“stephan”、“mike03”、“s.johnson”、“st_steward”、“john-johnson”、“12345”、“324_231351231”。
无效用户示例:''--123"、"....."、"john_-"、"_steve"、".info"。
我想出了这个表达方式
[A-Za-z0-9.\-_]+
但它也会匹配像 stefan_johnson_
这样不应该匹配的东西,因为 _
只能出现在字母和数字之间。如果我们在开头有 _
或任何其他已经提到的符号,情况也是如此。
【问题讨论】:
【参考方案1】:你可以使用
^[A-Za-z0-9]+(?:[._-][A-Za-z0-9]+)*$
请参阅regex demo。 详情:
^
- 字符串开头
[A-Za-z0-9]+
- 一个或多个 ASCII 字母或数字
(?:[._-][A-Za-z0-9]+)*
- 零次或多次出现
[._-]
- .
、_
或 -
[A-Za-z0-9]+
- 一个或多个 ASCII 字母或数字
$
- 字符串结束。
你可能需要支持任何 Unicode 字母或数字,然后使用
^[\pL\pN]+(?:[._-][\pL\pN]+)*$
\pL
匹配任何 Unicode(基本)字母,\pN
匹配任何 Unicode 数字。
如果您不想允许尾随 \n
(换行符)字符,请将 $
替换为 \z
。
另外,请参阅我的 "Validating strings with comma-separated values (with no leading/trailing separators)" YT video 解释这种验证技术。
【讨论】:
感谢您的详细回复!我需要一些时间来看看你的答案,但我真的很感激。我是一名学生,我真的很高兴有像你这样愿意提供帮助的人!谢谢!欣赏你! 我可以问你一些我刚刚想出的东西吗?我认为这个想法应该与您在表达中使用的想法非常相似。我正在尝试编写一个正则表达式,其中至少有两个单词,用点分隔。每个单词都是字母序列,字母之间可以有连字符,例如gmail.com
、gmail-staff.eu
、yahoo.fr
、admin-gmail.com
、mail.facebook.com
。我认为[A-Za-z]+(?:\-[A-Za-z]+)*
匹配一个单词(遵守规则)。我们如何让它匹配更多的单词,用点分隔?
@Medi [A-Za-z]+(?:[-.][A-Za-z]+)+
或 [A-Za-z]+(?:[-.][A-Za-z]+)*
以上是关于正则表达式匹配字母和数字,其中一些符号可以出现在它们之间的主要内容,如果未能解决你的问题,请参考以下文章
js密码正则表达式:要求包含大小写字母、数字和特殊符号,8~16位
js密码正则表达式:要求包含大小写字母、数字和特殊符号,8~16位