我正在尝试使用正则表达式创建一个函数,该函数可以决定我的字符串值是否正确。如果字符串以小写或大写字母或下划线开头,则应为true
。如果它以任何其他开头,则该函数必须返回false
。
我的测试输入是这样的:".dasfh"
表达式,我尝试使用的内容:[_a-zA-Z]
...,[:alpha:]
...,但它们都返回true。
我也尝试了一些更简单的任务:
"Hadfg"
其中表达式为[a-z]
...:返回true
BUT
"hadfg"
其中表达式为[A-Z]
...:返回false
有人能帮我理解这种行为吗?
答案 0 :(得分:5)
你试图将字符串中的第一个字符与特定字符匹配,这意味着你必须告诉正则表达式它必须是字符串中的第一个字符。
正则表达式引擎只是试图在整个字符串中找到任何匹配。
你用[a-z]
告诉它的是“在字符串的任何地方找到一个小写字符”。这意味着:
"Hadfg"
将等于true,因为它可以找到a,d,f或g作为匹配。
"HADFG"
将等于false,因为没有小写字母。
"hADFG"
与[A-Z]
匹配时会发生相同的情况,例如,它会找到A,D,F或G作为匹配,而"hadfg"
将返回false因为没有大写字符。
你在这里寻找的是你的正则表达式中的^
,它是一种特殊的修饰符,表示“行首”
因此,当您将此应用于正则表达式时,它将如下所示:/^[a-z]/
前一行的正则表达式基本上是说“从字符串的开头,是第一个跟随小写字母a-z的字符?”
尝试一下,你会看到。
对于您的解决方案,您需要/^[_a-zA-Z]/
来检查第一个字符是_,a-z还是A-Z字符。
作为参考,你可以在这些工具中找到备忘单(并用它来测试你的正则表达!)
对于参考或教程(如果你想开始理解regexp以及它们是如何工作的,我建议从头到尾阅读)theres regular-expressions.info。
正则表达从来都不是一件容易的事情,要小心你用它做什么,它是一个强大但有时丑陋的野兽来处理:)
<强> PS 强>
我看到你将问题标记为email-validation所以我会添加一些奖励正则表达式,以验证电子邮件地址的最低要求是绝对的对,我亲自使用这个:
.+@.+\..{2,}
当分手时,看起来像这样:
.+
- 任何一个或多个角色
@
- 后跟一个文字@字符
.+
- 任何一个或多个角色
\.
- 后跟文字。性格
.{2,}
- 两个或两个以上任何角色
或者,您可以将{2,}
替换为+
以使其成为一个或多个,但这样会允许TLD包含1个字符。
要查看工作时的RFC电子邮件正则表,请检查this link。 当我看到那个正则表达式时,我基本上只想在某个角落里哭泣,肯定有一些你不能在我的正则表达式没有解决的电子邮件地址中做的事情,但至少它确保它是看起来像< / strong>它是 e-mailable 无论如何,如果一个新用户决定填写一些不再是我的问题的公牛,我不想强迫他们改变那个1字符只是因为巨大的正则表达式也不同意。