Javascript 测试字符串是否为仅包含字母字符的大写格式

Javascript 测试字符串是否为仅包含字母字符的大写格式,javascript,regex,Javascript,Regex,我尝试测试以下规则是否适用于字符串: 必须以大写字母开头 接下来的字符可以是大写或小写格式 仅允许以下字符:A-z 例如,字符串可以是string或CamelCaseString,但既不是string也不是CamelCaseString也不是String125。数字和特殊字符不得存在 我在以前的一篇文章中发现 const isUpperCamelCase = (str) => { return /\b[A-Z][a-z]*([A-Z][a-z]*)*\b/.test(str) }

我尝试测试以下规则是否适用于字符串:

  • 必须以大写字母开头
  • 接下来的字符可以是大写或小写格式
  • 仅允许以下字符:
    A-z
例如,字符串可以是
string
CamelCaseString
,但既不是
string
也不是
CamelCaseString
也不是
String125
。数字和特殊字符不得存在

我在以前的一篇文章中发现

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!
})
如果在字符串中包含特殊字符,如
(,)+-
,则函数应计算为
false
时,其计算结果为
true
。这是因为特殊字符之间存在匹配,但这不是我想要的行为。我怎样才能解决这个问题


注:请在答案中添加详细说明。谢谢!:)

正则表达式需要锚来匹配字符串的开头和结尾,而不是
\b
。我们也要这样做:

/^[A-Z][A-Za-z]*$/

正则表达式需要锚来匹配字符串的开头和结尾,而不是
\b
。我们也要这样做:

/^[A-Z][A-Za-z]*$/

使用
/^[A-Z][A-zA-Z]*$/
@anubhava谢谢你,这似乎有效!如果您愿意,请发布答案!:)@AubHava也匹配<代码> CAMELCASE < /Calp>注意,我不考虑AB CAMELSE,但它可能与您的定义匹配。@ HunterMcMillen是一个有效的CAMEL案例字符串。考虑“PIN”,如“个人识别号”。您通常会将其作为“PIN”而不是“PIN”来处理。使用
/^[A-Z][A-zA-Z]*$/
@anubhava感谢您的帮助!如果您愿意,请发布答案!:)@AubHava也匹配<代码> CAMELCASE < /Calp>注意,我不考虑AB CAMELSE,但它可能与您的定义匹配。@ HunterMcMillen是一个有效的CAMEL案例字符串。考虑“PIN”,如“个人识别号”。通常情况下,您会将这种情况视为“PIN”,而不是“PIN”。