我正在尝试使用正则表达式创建一个函数,该正则表达式可以判断我的字符串值是否正确。如果字符串以小写或大写字母或下划线开头,则应为true。如果它以任何其他函数开头,则该函数必须返回false。
我的测试输入如下所示:".dasfh"
表达式,我试图使用的是:[_a-zA-Z].,[:alpha:].,但这两个表达式都返回true。
我还尝试了一个更简单的任务:
"Hadfg",其中表达式为[a-z].:返回true
但
"hadfg",其中表达式为[A-Z].:返回false
有人能帮我理解这种行为吗?
发布于 2015-11-13 13:52:36
您正在尝试匹配字符串中的第一个字符,这意味着您必须告诉regex,它必须是字符串中的第一个字符。
regex引擎只是试图在整个字符串中找到任何匹配项。
你用[a-z]告诉它的就是“在字符串中的任何地方给我找一个小写字符”。这意味着:
"Hadfg"将等于true,因为它可以找到a、d、f或g作为匹配。"HADFG"将等于false,因为没有小写字母。
例如,当"hADFG"与[A-Z]匹配时,它将能够找到A、D、F或G作为匹配,而"hadfg"将返回false,因为没有大写字符。
您在这里寻找的是正则表达式中的^,它是一种特殊的修饰符,表示“行的开始”。
因此,当您将此应用于正则表达式时,它将如下所示:/^[a-z]/。
上一行的正则表达式基本上是说:“从字符串开始,第一个字符是小写字母a的后缀吗?”
试一试,你就知道了。
对于您的解决方案,需要/^[_a-zA-Z]/检查第一个字符是_、A还是A字符。
作为参考,您可以在这些工具中找到备忘表(当然还可以用它测试您的正则表达式!)
对于参考或教程(如果您想开始理解regexp及其工作方式,我建议从头到尾阅读),有regular-expressions.info。
Regex从来都不是一件容易的事,你要小心对待它,它是一种强大但有时很丑陋的野兽:)
PS
我看到你将你的问题标记为电子邮件验证,所以我将添加一个小的额外的正则表达式来验证电子邮件地址的最低要求是绝对正确的,我个人使用这个:
.+@.+\..{2,}
分手的时候,看起来是这样的:
.+ -任何字符中的一个或多个
@ -后面跟着文字@字符
.+ -任何字符中的一个或多个
\. -后面跟着文字。字符
.{2,} -任何字符中的两个或两个以上
可以选择用{2,}替换+,使其成为一个或多个字符,但这将允许具有1个字符的TLD。
要在工作中查看RFC电子邮件-regex,请查看此链接。当我看那个regex的时候,我基本上只是想在某个角落哭,我的regex没有地址,你绝对不能在电子邮件地址中做一些事情,但至少它确保它是看起来像的东西--无论如何,它都是可以电子邮件的,如果一个新用户决定填上什么牛,这不再是我的问题了,我也不想强迫他们改变这个字符,因为庞大的regex也不同意它。
https://stackoverflow.com/questions/33694098
复制相似问题