0

我正在尝试使用以下代码检查字符串是否包含特定字母,例如EorF

/^(F?)/.test('E22')

问题是它会返回true,什么时候应该返回false。最让我困扰的是,在 regexpal.com 上测试正则表达式非常完美,但应用时......错误。

知道出了什么问题吗?

http://jsfiddle.net/alleks/CykQv/

更新

我已经解释错了。我会在不同的情况下进行个别检查。因此,在特定情况下,我需要查看字符串是否包含一个E,而在其他情况下,如果包含一个F

//Case1
if (/^(F?)/.test(stringContainsE)) ....

//Case2
if (/^(F?)/.test(stringContainsF)) ....

更新2

两种情况都不应该返回 TRUE:http: //jsfiddle.net/alleks/CykQv/2/

4

2 回答 2

9

问号使 F 可选。该正则表达式将为每个字符串返回 true。

/[EF]/

将匹配包含字母 E 和/或字母 F 的字符串。

编辑:正如保罗在他的评论中提到的, ^ 字符匹配字符串的开头。如果字符必须出现在字符串的开头,则:

/^E/

将在字符串的开头测试 E。^如果你想在字符串中的任何地方简单地省略。但是,在这种情况下,在 Javascript 中,您应该简单地使用:

myString.charAt(0) === 'E' // for the beginning or
myString.indexOf('E') !== -1 // for anywhere

这个简单操作的正则表达式是多余的。

于 2013-11-04T16:55:07.783 回答
5

I'm trying to check if a string contains specific letters like E or F

正则表达式应该是:

/[EF]/.test('E22');

您的正则表达式^F?使 F 成为可选的,对于任何输入都将始终返回 true。

更新:这应该在没有可选锚的情况下工作?

//Case1
if (/^E/.test(stringContainsE)) ....

//Case2
if (/^F/.test(stringContainsF)) ....
于 2013-11-04T16:54:05.550 回答