diff --git a/CHANGELOG.md b/CHANGELOG.md
index a6aca8c45b..98edcee215 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,11 @@ This change log adheres to standards from [Keep a CHANGELOG](https://keepachange
## Unreleased
+### Fixed
+* [`jsx-curly-brace-presence`]: do not trigger on strings containing a quote character ([#3798][] @akulsr0)
+
+[#3798]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3798
+
## [7.35.0] - 2024.07.19
### Added
diff --git a/lib/rules/jsx-curly-brace-presence.js b/lib/rules/jsx-curly-brace-presence.js
index 213e0ce3ca..cfbe3bda8d 100755
--- a/lib/rules/jsx-curly-brace-presence.js
+++ b/lib/rules/jsx-curly-brace-presence.js
@@ -269,7 +269,7 @@ module.exports = {
&& !containsMultilineComment(expression.value)
&& !needToEscapeCharacterForJSX(expression.raw, JSXExpressionNode) && (
jsxUtil.isJSX(JSXExpressionNode.parent)
- || !containsQuoteCharacters(expression.value)
+ || (!containsQuoteCharacters(expression.value) || typeof expression.value === 'string')
)
) {
reportUnnecessaryCurly(JSXExpressionNode);
diff --git a/tests/lib/rules/jsx-curly-brace-presence.js b/tests/lib/rules/jsx-curly-brace-presence.js
index 4c157deb0c..259b9538b2 100755
--- a/tests/lib/rules/jsx-curly-brace-presence.js
+++ b/tests/lib/rules/jsx-curly-brace-presence.js
@@ -934,6 +934,12 @@ ruleTester.run('jsx-curly-brace-presence', rule, {
errors: [{ messageId: 'unnecessaryCurly' }],
options: [{ props: 'never', children: 'never', propElementValues: 'never' }],
features: ['no-ts'],
+ },
+ {
+ code: ``,
+ output: ``,
+ errors: [{ messageId: 'unnecessaryCurly' }],
+ options: [{ props: 'never', children: 'never', propElementValues: 'never' }],
}
)),
});