我正在通过在线教程学习Javascript,但是在那个网站或其他任何我google搜索的地方都没有解释为符号的混乱构成正则表达式。
检查是否所有数字: / ^ [0-9] + $ /
检查是否所有字母: / ^ [a-zA-Z] + $ /
最难的一个:
验证电子邮件: /^[\w-.+]+\@[a-zA-Z0-9.-]+.[a-zA-z0-9]{2, 4} $ /
所有斜线和美元符号和括号是什么意思?请解释一下。
(顺便说一句,创建一个灵活的网站需要哪些语言?我知道一点Javascript并想学习jQuery和PHP。还需要其他什么吗?)
感谢。
答案 0 :(得分:3)
http://www.regular-expressions.info/对正则表达式有一个很棒的解释,包括有关语言和实现细节的说明。
答案 1 :(得分:3)
已经有很多很好的网站可以解释正则表达式,所以我将稍微介绍一下你给出的每个具体例子的翻译方式。
检查所有数字:^
是否锚定表达式的开头(例如从文本的开头开始)。没有它,可以在任何地方找到匹配。 [0-9]
找到该字符类中的字符(例如数字0-9)。字符类之后的+
仅表示“一个或多个”。结尾$
锚定文本的结尾(例如,匹配应该运行到输入的结尾)。因此,如果将它们放在一起,那么正则表达式将允许字符串中只有1个或更多数字。请注意,锚点很重要,因为没有它们可能会匹配类似“foo123bar”的内容。
检查是否所有字母:与上面几乎相同,但字符类别不同。在此示例中,字符类[a-zA-Z]
表示所有小写和大写字符。
最后一个实际上并不比其他两个更难,只是更长。这个答案已经很长了,所以我只会解释新的符号。字符类中的\w
将匹配单词字符(每个正则表达式实现定义,但通常至少为0-9a-zA-Z_)。 @
之前的反斜杠会转义@
,因此它不会被视为正则表达式中的标记。句点将匹配任何字符,因此.+
将匹配任何字符中的一个或多个(例如,a,1,Z,1a等)。正则表达式的最后一部分({2,4}
)定义了一个区间表达式。这意味着它可以匹配至少2个之前的东西,最多4个。
希望你能从上面得到一些东西。
答案 2 :(得分:2)
让我解释一下:
检查是否所有数字:/ ^ [0-9] + $ /
所以,我们首先看到的是开头和结尾的“/”。这是一个分隔符,只用于显示正则表达式的开头和结尾。
接下来,我们有一个“^”,这意味着字符串的开头。 [0-9]表示0-9之间的数字。 +是一个修饰语,它修改了它前面的术语,在这种情况下,它意味着你可以拥有一个或多个东西,所以你可以有一个或多个0-9的数字。
最后,我们以“$”结尾,这与“^”相反,表示字符串的结尾。所以把它们放在一起,它基本上确保在字符串的开头和结尾之间,可以有0-9的任意数字。
检查是否所有字母:/ ^ [a-zA-Z] + $ /
我们注意到这非常相似,但它不是检查数字0-9,而是检查字母a-z(小写)和A-Z(大写)。
最难的一个:
验证电子邮件:/^ [\ - ---] + [@] -ZA-Z0-9.-] +。[ - zA-z0-9] {2,400 $ / 强>
“\ w”表示它是一个单词,在这种情况下,我们可以有任意数量的字母或数字,以及句点意味着它几乎可以是任何字符。
这里的新东西是转义字符。如果没有通过在前面放置斜线来逃避它们,则不能使用许多符号,如“\ @”的情况。这意味着它直接寻找符号“@”。
现在它寻找字母和符号,一个句号(这个似乎是不正确的,它也应该逃避句号,虽然它仍然有效,因为未转义的句号会产生任何符号)。 {}里面的数字意味着前一个术语中有这么多术语,所以[a-zA-Z0-9]中应该有2-4个字符(这部分是网站域名,例如.com ,.ca或.info)。注意这里有另一个错误,[a-zA-z0-9]应该是[a-zA-Z0-9](大写Z)。
哦,看看上面列出的那个网站,它也是一套很棒的教程。
答案 3 :(得分:1)
正则表达式是一个复杂的野兽,正如已经指出的那样,谷歌有很多指南你可以阅读。
回答OP问题:
检查是否所有数字:/ ^ [0-9] + $ /
这里的regexp都用//进行了动画处理,很像字符串引用了''或“”。
^表示字符串或行的开头(取决于您对多行匹配的选项)
[...]
被称为角色类。 []
中的任何内容都是此位置0-9
中该位置的单个匹配字符的列表。减号具有“之间的字符序列”的特殊含义。所以[0-9]
表示“0123456789之一”。
+
表示前一场比赛的“1个或更多”(在这种情况下为[0-9]
),因此一个或多个数字
$
表示字符串/行匹配结束。
因此总结一下,找到任何只包含 数字的字符串,即'0123a'将不匹配,因为[0-9]+
无法与之前$
匹配。
检查是否所有字母:/ ^ [a-zA-Z] + $ /
希望[A-Za-z]
现在有意义(A-Z
= ABCDEF ... XYZ和a-z
abcdef ... xyz)
验证电子邮件:/^ [\ - ---] + [@] -ZA-Z0-9.-] +。[ - zA-z0-9] {2,400 $ / 强>
并非所有regexp解析都知道\w
序列。我知道Javascript,java和perl支持它。
我们已经开始讨论'/^
,我们正在寻找这个[]
匹配
\w
-
.
和+
。我认为regexp是不正确的。减号应使用\
进行转义,或者应该位于[]
的末尾(即[\w+.-]
)。但是,他们基本上试图允许任何 abcdefghijklmnopqrstuvwxyz01234567890 - 。+
因此fred.smith-foo+wee@mymail.com
会匹配但fred.smith%foo+wee@mymail.com
不匹配(%
与[\w.+-]
不匹配)。
\@
是atsil符号(它是在perl扩展@数组变量引用时被转义)
[a-zA-Z0-9.-]+
与[\w.-]+
相同。非常类似于匹配的用户部分,但与+
不匹配。所以这匹配foo.com.
和google.co.
但不匹配my+foo.com
或my***domain.co.
.
表示匹配任何一个字符。这又是不正确的,因为fred @ foo%com会匹配.
匹配%*^%$£!
等。这应该写成\.
最后一个字符类[a-zA-z0-9]{2,4}
在字符类中指定的a-zA-Z0-9的2 3或4之间查找(很像+
查找“1更多”{{ 1}}表示至少2个,前一个匹配最多4个。所以'foo'匹配,'11'匹配,'11111'不匹配,'信息'不匹配。
“调整”的正则表达式应为:
/ ^ [\ W + - 。]。+ \ @ [A-ZA-Z0-9 .-] + \ [A-ZA-Z0-9] {2,4} $ /
答案 4 :(得分:0)
我没有在RegEx上做过教程,那是done really well already,但这是你的表达式的意思。
/^<something>$/
字符串开头,中间有东西,然后立即结束。
/^foo$/.test('foo');
// true /^foo$/.test('fool');
// false /^foo$/.test('afoo');
// false +
一件或多件事:
/a+/.test('cot');
//假/a+/.test('cat');
//真/a+/.test('caaaaaaaaaaaat');
//真 [<something>]
包括括号中找到的所有字符。 (包括0-9,a-z和A-Z等范围,以及0-9a-zA-Z等的特殊代码_-
/^[0-9]+/.test('f00')
//假/^[0-9]+/.test('000')
//真 {x,y}
/^[0-9]{1,2}$/.test('12');
// true /^[0-9]{1,2}$/.test('1');
// true /^[0-9]{1,2}$/.test('d');
// false /^[0-9]{1,2}$/.test('124');
// false 所以,这应该涵盖所有内容,但是还有很好的衡量标准:
/^[\w-.+]+\@[a-zA-Z0-9.-]+.[a-zA-z0-9]{2,4}$/
至少从\ w,-
,+
或.
开始。接下来是@,后面跟着一组a-zA-Z0-9.-
中的至少一个后跟一个任何的字符(.
表示任何内容,它们的意思是\.
),其次是由a-zA-z0-9
作为旁注,这个检查电子邮件的正则表达式不仅过时了,而且非常非常非常不正确。