【问题标题】:Test if string is in Upper Camel Case format with only alphabetic characters测试字符串是否为大写驼峰格式,仅包含字母字符
【发布时间】:2018-08-11 03:50:54
【问题描述】:

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

  • 必须以大写字母开头。
  • 下一个字符可以是大写或小写格式。
  • 只允许使用以下字符:A-z

例如,字符串可以是StringCamelCaseString,但既不是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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    相关资源
    最近更新 更多