-6

我在“REGEX”上遇到过,但我不太了解它使用的那些符号。示例...等等

rege = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;

我使用上面的方法进行电子邮件验证并且它可以工作,但正如我所说,我并不完全理解它是如何工作的!你们中有人有简单的教程或网站来解释它吗?

因为我要为自己编写 Float 验证。

接受 0-9(仅限数字),带十进制字符 (.) 且长度 = 5。

示例:99.9

4

5 回答 5

7

字符串的开头:

^

这部分字符串可能包含字符 AZ、az、0-9、下划线、连字符和句点。

([A-Za-z0-9_\ -\ .])

使用前面的规则集匹配一个或多个字符:

+

继续使用“@”:

\@

继续一段时期:

\ .

这部分字符串可能包含字符 AZ 和 az,并且长度必须是 2、3、4 个字符。

([A-Z-Z]{2,4})

字符串结尾:

$

于 2012-09-09T18:26:51.970 回答
2

如您所知,正则表达式是在两个/字符之间定义的。

正则表达式中的第一件事是^指示字符串开头的字符,因此它不会在中途开始匹配。

然后在大括号内定义一个组(),这允许您构建一个子模式并返回部分匹配。表示在您的情况下正匹配的[]字符列表A-Za-z0-9_\-\.,因此基本上每个字母、数字、下划线、破折号和点字符。+告诉该组匹配 1 次或多次出现。

然后@符号与 匹配\@\转义下一个字符,因此忽略默认功能并匹配字符本身。

然后还有和第一组一样的另一组,匹配一个.字符,匹配顶级域(仅匹配长度为2到4的字母字符)。

表示字符串的$结尾,因此不仅匹配开头。

于 2012-09-09T18:31:29.830 回答
1
  • 封闭的 /slashes/ 定义模式的开始和停止
  • "^" 表示字符串的开头
  • (括号)内的任何内容都将作为单独的组/部分进行匹配
  • [括号]中的字符表示“匹配其中任何一个”
  • “+”表示“匹配之前出现的任何内容,一次或多次”
  • "\x" 表示转义,这使得捕获正则表达式语言字符成为可能,例如 "*"
  • \@ 表示转义的“@”字符(并非总是必要的)
  • {x,y} 表示“匹配之前出现的任何内容,x 到 y 次”
  • "$" 表示字符串结束

所以,你的模式意味着:

  • 以一个或多个 url 安全字符(字母数字、“.”和“_”)开头的字符串
  • 然后是一个“@”
  • 然后再次使用一个或多个 url 安全字符
  • 然后是一个点“。”
  • 最后,来自拉丁字母表的 2 到 4 个字符(即“com”、“eu”或“info”)

...这是一个电子邮件地址

在这里试验一下: RegExr

于 2012-09-09T18:35:53.423 回答
1

对于一个好的教程,你可以从这个链接开始。尽管此链接笼统地讲述了正则表达式,但您应该知道(并且该链接还解释了)在不同语言使用的不同正则表达式引擎之间,正则表达式语法和行为之间存在细微差异。

您的正则表达式的细分是:

  • //封闭的斜线表示它是一个正则表达式模式。
  • ^$这表示行的开始和结束。
  • ([A-Za-z0-9_\-\.])+方括号[]表示一个字符类,它基本上匹配方括号内列出的可能字符中的一个字符。并且+ 这个类之外的量词表示这个字符类可以重复1次或多次。在您的正则表达式中,字符类表示可能是单词字符(字母数字或下划线)、连字符或点的匹配项。这可以重写为([-\w.]+)。您会注意到,您不需要使用反斜杠转义字符类中的特殊字符。对于电子邮件地址验证,这会尝试匹配“本地部分”。
  • \@这表示与电子邮件地址中的费率符号匹配。这实际上不需要用反斜杠转义。
  • ([A-Za-z0-9_\-\.])+这表示与“本地部分”相同,只是现在它尝试匹配电子邮件的域地址。
  • \.这表示域和顶级域之间的时间段。这需要用反斜杠转义,因为句点是正则表达式引擎的保留字,表示任何字符(换行符除外)。
  • ([A-Za-z]{2,4})这表示长度为 2 到 4 个字符的字母不区分大小写字符串。这代表顶级域名,如 com、org 等...

所以上面的正则表达式可以更好地写成^([-\w.]+)@([-\w.]+)\.([A-Za-z]{2,4})$.
+量词放在括号内。使用的最常见原因()是捕获模式的一部分,以便您以后可以提取它。因此,如果您需要捕获电子邮件地址的“本地部分”或“域”,则捕获重复的字符类比只匹配正则表达式所具有的第一个字符更有意义。

你可以在RegexPal看到这个正则表达式


至于匹配浮点数,这里已经讨论过了。
但是,如果您的浮点数需要 5 的精度,那就完全不同了。
试试这个使用积极的前瞻

^[-+]?(?=\d+(\.\d+)?)(\.?\d){1,5}$

在这里

于 2012-09-09T18:43:16.990 回答
1

我可以推荐以下网站:http ://www.regex101.com

这是您的正则表达式解释的链接:http ://regex101.com/r/aE3yB5

您还可以插入测试字符串并测试您的表达式。

该网站将解释任何给定的表达方式,并在其中发现错误(如果有)。

我希望这有帮助!

于 2012-09-09T19:23:33.847 回答