正则表达式以匹配包含字母,数字和@

时间:2019-03-15 02:32:04

标签: php regex

我需要一个正则表达式来匹配字母,数字以及可能的@和。 (它们不是电子邮件地址)

匹配:

mirs99milo
kiapp98@dot.com

不匹配:

设备
99987

有时候,字符串在开始时带有一个特殊字符,在这种情况下,应该跳过字符并获取字符串,例如:

-mirs99milo ->忽略“-”,仅匹配mirs99milo
-kiapp98@dot.com ->忽略“-”,仅匹配kiapp98@dot.com

我已经有这个了

(?=。 \ w)(?=。 [A-Za-z])[\ w] {1,10}

除了字符串中带有“ @”的字符串之外,其他都很好用

https://regex101.com/r/bHUCaX/3

非常感谢您的帮助。谢谢。

3 个答案:

答案 0 :(得分:0)

您只需将@.添加到您要匹配的字符集中:

(?=.*\d)(?=.*[A-Za-z])[\dA-Za-z@.]+

Demo on regex101.com

答案 1 :(得分:0)

尝试一下 (?=。 \ d)(?=。 [A-Za-z])[。@ A-Za-z0-9] {1,20}

答案 2 :(得分:0)

由于您的要求不清楚,这是我根据您的问题做出的猜测:

您要确保输入字符串:

  1. 必须包含至少一位数字和至少一个字母
  2. 该字符串应仅包含字母数字,@.
  3. 忽略匹配中的第一个字符

如果这是必需的,则可以使用:

^(?=.*\d)(?=.*[a-zA-Z]).?[\da-zA-Z@.]+$

这应该使您可以验证输入的字符串是否符合您的格式。

但是,如果要在符合条件的情况下获取匹配的字符串,并排除第一个特殊字符(如果存在),则可以这样做

^(?=.*\d)(?=.*[a-zA-Z]).??([\da-zA-Z@.]+)$

您需要的是第1组

正则表达式的解释:

^                                           start of line
 (?=.*\d)                                   look-ahead: at least a digit
         (?=.*[a-zA-Z])                     look-ahead: at least a alphabet
                       .??                  optional one any char, 
                                              reluctant match
                          (             )   matching group
                           [\da-zA-Z@.]+    1-or-more occurrence of 
                                               digits,alphabet, @ and dot
                                         $  end of line

Regex101 Demo (Based on Nick's demo)