dotnet/AspNetCore.Docs · error · Error
Syntax error, unrecognized expression: ${msg}
Error message
Syntax error, unrecognized expression: ${msg} What it means
Identical guard to error 3 in the 3.x sample's jquery-2.2.0.js: Sizzle.error fires for any unparseable selector passed to jQuery's selector APIs, appending the offending expression.
Source
Thrown at aspnetcore/mvc/controllers/testing/samples/3.x/TestingControllersSample/src/TestingControllersSample/wwwroot/js/jquery-2.2.0.js:1463
}
var fn = Expr.attrHandle[ name.toLowerCase() ],
// Don't get fooled by Object.prototype properties (jQuery #13807)
val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
fn( elem, name, !documentIsHTML ) :
undefined;
return val !== undefined ?
val :
support.attributes || !documentIsHTML ?
elem.getAttribute( name ) :
(val = elem.getAttributeNode(name)) && val.specified ?
val.value :
null;
};
Sizzle.error = function( msg ) {
throw new Error( "Syntax error, unrecognized expression: " + msg );
};
/**
* Document sorting and removing duplicates
* @param {ArrayLike} results
*/
Sizzle.uniqueSort = function( results ) {
var elem,
duplicates = [],
j = 0,
i = 0;
// Unless we *know* we can detect duplicates, assume their presence
hasDuplicate = !support.detectDuplicates;
sortInput = !support.sortStable && results.slice( 0 );
results.sort( sortOrder );
if ( hasDuplicate ) {View on GitHub (pinned to c67a80103a)
Solutions
- Escape metacharacters with $.escapeSelector (3.x) or manual escaping.
- Use document.getElementById and wrap with $().
- Validate/sanitize user-supplied selector input.
Example fix
// before
$('#user.email'); // throws
// after
$('#' + $.escapeSelector('user.email')); Defensive patterns
Strategy: validation
Validate before calling
function safeIdSelector(id) {
return '#' + (window.jQuery && jQuery.escapeSelector ? jQuery.escapeSelector(id) : id.replace(/([!\"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g, '\\$1'));
}
$(safeIdSelector(dynamicId)).hide(); Type guard
function looksLikeValidSelector(s) {
if (typeof s !== 'string' || s.length === 0) return false;
try { $(s); return true; } catch (e) { return false; }
} Try / catch
try {
return $(userSelector);
} catch (e) {
if (/Syntax error, unrecognized expression/.test(e.message)) {
console.warn('Invalid selector:', userSelector);
return $();
}
throw e;
} Prevention
- Use document.getElementById and wrap with $().
- Escape metacharacters with $.escapeSelector.
- Never interpolate raw user input into a selector.
When it happens
Trigger: Invalid selectors ($('[unclosed'), unescaped metacharacters in ids ($('#a.b')), malformed HTML parsed as selector.
Common situations: Dynamic selectors from data; ids with dots/colons/brackets; unsupported pseudo-classes.
Related errors
- Syntax error, unrecognized expression: ${msg}
- Syntax error, unrecognized expression: ${msg}
- jQuery requires a window with a document
- Bootstrap's JavaScript requires jQuery
- Bootstrap's JavaScript requires jQuery version 1.9.1 or high
AI-assisted analysis of dotnet/AspNetCore.Docs@c67a80103a (2026-08-13).
Data as JSON: /api/errors/3e2a6464cbd8151f.
Report an issue: GitHub.