正则表达式匹配字母和数字,其中一些符号可以出现在它们之间

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.comgmail-staff.euyahoo.fradmin-gmail.commail.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位

正则表达式

js正则表达式,只能出现字母和数字,而且必须出现一个字母或数字

正则表达式[\u4E00-\u9fa5]为啥能匹配到数字,字母和某些符号?