UNPKG

1.46 kBJavaScriptView Raw
1/**
2 * @fileoverview Rule to forbid control charactes from regular expressions.
3 * @author Nicholas C. Zakas
4 */
5
6//------------------------------------------------------------------------------
7// Rule Definition
8//------------------------------------------------------------------------------
9
10module.exports = function(context) {
11
12 "use strict";
13
14
15 function getRegExp(node) {
16
17 if (node.value instanceof RegExp) {
18 return node.value;
19 } else if (typeof node.value === "string") {
20
21 var parent = context.getAncestors().pop();
22 if ((parent.type === "NewExpression" || parent.type === "CallExpression") &&
23 parent.callee.type === "Identifier" && parent.callee.name === "RegExp") {
24
25 // there could be an invalid regular expression string
26 try {
27 return new RegExp(node.value);
28 } catch (ex) {
29 return null;
30 }
31
32 }
33 } else {
34 return null;
35 }
36
37 }
38
39
40
41 return {
42
43 "Literal": function(node) {
44
45 var computedValue,
46 regex = getRegExp(node);
47
48 if (regex) {
49 computedValue = regex.toString();
50 if (/[\x00-\x1f]/.test(computedValue)) {
51 context.report(node, "Unexpected control character in regular expression.");
52 }
53 }
54 }
55 };
56
57};