【发布时间】:2018-08-11 03:50:54
【问题描述】:
我尝试测试以下规则是否适用于字符串:
- 必须以大写字母开头。
- 下一个字符可以是大写或小写格式。
- 只允许使用以下字符:
A-z
例如,字符串可以是String 或CamelCaseString,但既不是string,也不是Camel-Case-String,也不是String125。不得存在数字和特殊字符。
我在之前的帖子中找到了this answer。
const isUpperCamelCase = (str) => {
return /\b[A-Z][a-z]*([A-Z][a-z]*)*\b/.test(str)
}
我有以下测试套装,试图测试上述功能。不幸的是,并非所有测试都通过:
test('isUpperCamelCase', () => {
expect(isUpperCamelCase('Button')).toBeTruthy()
expect(isUpperCamelCase('GreenButton')).toBeTruthy()
expect(isUpperCamelCase('GreenLargeButton')).toBeTruthy()
expect(isUpperCamelCase('B')).toBeTruthy()
expect(isUpperCamelCase('button')).toBeFalsy()
expect(isUpperCamelCase('buttonCamel')).toBeFalsy()
expect(isUpperCamelCase('Green-Button')).toBeFalsy() // => fail!
expect(isUpperCamelCase('Button125')).toBeFalsy()
expect(isUpperCamelCase('Green_Button')).toBeFalsy()
expect(helpers.isUpperCamelCase('Green+Button')).toBeFalsy() // => fail!
expect(helpers.isUpperCamelCase('green+Button')).toBeFalsy() // => fail!
})
如果我在字符串中包含特殊字符(例如 (,)+-),则函数的计算结果应为 true,而它应该计算为 false。发生这种情况是因为特殊字符之间存在匹配,但这不是我想要的行为。我怎么解决这个问题?
注意:请在您的回答中添加详细说明。谢谢! :)
【问题讨论】:
-
使用
/^[A-Z][a-zA-Z]*$/ -
@anubhava 感谢这似乎有效!如果您愿意,请发布答案! :)
-
@anubhava 这也匹配
CAMELCASE -
请注意,我不会考虑 AB camelcase,但也许它符合您的定义。
-
@HunterMcMillen 这是一个有效的驼峰式字符串。考虑“pin”,如“个人识别号”。您通常会将其命名为“PIN”,而不是“Pin”。
标签: javascript regex