mirror of
https://github.com/zhigang1992/angular.js.git
synced 2026-04-30 05:45:44 +08:00
Remove RegExp parser
- RegExp parser is rearly used, feature, and one should not have RegExps in views anyways, so we are removing it BACKWARD INCOMPATIBLE CHANGE!!!
This commit is contained in:
@@ -3,6 +3,11 @@
|
|||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
- Fixed failed assignments of form obj[0].name=value (issue #169)
|
- Fixed failed assignments of form obj[0].name=value (issue #169)
|
||||||
|
|
||||||
|
### Breaking changes
|
||||||
|
- Angular expressions in the view used to support regular expressions. This feature was rarely
|
||||||
|
used and added unnecessary complexity. It not a good idea to have regexps in the view anyway,
|
||||||
|
so we removed this support. If you had any regexp in your views, you will have to move them to
|
||||||
|
your controllers.
|
||||||
|
|
||||||
# <angular/> 0.9.6 night-vision (2010-12-06) #
|
# <angular/> 0.9.6 night-vision (2010-12-06) #
|
||||||
|
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ function getterFn(path){
|
|||||||
code += 'if(!s) return s;\n' +
|
code += 'if(!s) return s;\n' +
|
||||||
'l=s;\n' +
|
'l=s;\n' +
|
||||||
's=s' + key + ';\n' +
|
's=s' + key + ';\n' +
|
||||||
'if(typeof s=="function") s = function(){ return l'+key+'.apply(l, arguments); };\n';
|
'if(typeof s=="function" && !(s instanceof RegExp)) s = function(){ return l'+key+'.apply(l, arguments); };\n';
|
||||||
if (key.charAt(1) == '$') {
|
if (key.charAt(1) == '$') {
|
||||||
// special code for super-imposed functions
|
// special code for super-imposed functions
|
||||||
var name = key.substr(2);
|
var name = key.substr(2);
|
||||||
|
|||||||
@@ -40,8 +40,6 @@ function lex(text, parseStringsForObjects){
|
|||||||
readString(ch);
|
readString(ch);
|
||||||
} else if (isNumber(ch) || is('.') && isNumber(peek())) {
|
} else if (isNumber(ch) || is('.') && isNumber(peek())) {
|
||||||
readNumber();
|
readNumber();
|
||||||
} else if ( was('({[:,;') && is('/') ) {
|
|
||||||
readRegexp();
|
|
||||||
} else if (isIdent(ch)) {
|
} else if (isIdent(ch)) {
|
||||||
readIdent();
|
readIdent();
|
||||||
if (was('{,') && json[0]=='{' &&
|
if (was('{,') && json[0]=='{' &&
|
||||||
@@ -207,37 +205,6 @@ function lex(text, parseStringsForObjects){
|
|||||||
}
|
}
|
||||||
throwError("Unterminated quote", start);
|
throwError("Unterminated quote", start);
|
||||||
}
|
}
|
||||||
function readRegexp(quote) {
|
|
||||||
var start = index;
|
|
||||||
index++;
|
|
||||||
var regexp = "";
|
|
||||||
var escape = false;
|
|
||||||
while (index < text.length) {
|
|
||||||
var ch = text.charAt(index);
|
|
||||||
if (escape) {
|
|
||||||
regexp += ch;
|
|
||||||
escape = false;
|
|
||||||
} else if (ch === '\\') {
|
|
||||||
regexp += ch;
|
|
||||||
escape = true;
|
|
||||||
} else if (ch === '/') {
|
|
||||||
index++;
|
|
||||||
var flags = "";
|
|
||||||
if (isIdent(text.charAt(index))) {
|
|
||||||
readIdent();
|
|
||||||
flags = tokens.pop().text;
|
|
||||||
}
|
|
||||||
var compiledRegexp = new RegExp(regexp, flags);
|
|
||||||
tokens.push({index:start, text:regexp, flags:flags,
|
|
||||||
fn:function(){return compiledRegexp;}});
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
regexp += ch;
|
|
||||||
}
|
|
||||||
index++;
|
|
||||||
}
|
|
||||||
throwError("Unterminated RegExp", start);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////
|
/////////////////////////////////////////
|
||||||
|
|||||||
@@ -13,8 +13,9 @@ extend(angularValidator, {
|
|||||||
* @css ng-validation-error
|
* @css ng-validation-error
|
||||||
*
|
*
|
||||||
* @example
|
* @example
|
||||||
|
* <script> var ssn = /^\d\d\d-\d\d-\d\d\d\d$/; </script>
|
||||||
* Enter valid SSN:
|
* Enter valid SSN:
|
||||||
* <input name="ssn" value="123-45-6789" ng:validate="regexp:/^\d\d\d-\d\d-\d\d\d\d$/" >
|
* <input name="ssn" value="123-45-6789" ng:validate="regexp:$window.ssn" >
|
||||||
*
|
*
|
||||||
* @scenario
|
* @scenario
|
||||||
* it('should invalidate non ssn', function(){
|
* it('should invalidate non ssn', function(){
|
||||||
|
|||||||
@@ -59,14 +59,6 @@ describe('parser', function() {
|
|||||||
expect(undefined).toEqual(tokens[i].fn());
|
expect(undefined).toEqual(tokens[i].fn());
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should tokenize RegExp', function() {
|
|
||||||
var tokens = lex("/r 1/");
|
|
||||||
var i = 0;
|
|
||||||
expect(tokens[i].index).toEqual(0);
|
|
||||||
expect(tokens[i].text).toEqual('r 1');
|
|
||||||
expect("r 1".match(tokens[i].fn())[0]).toEqual('r 1');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should tokenize quoted string', function() {
|
it('should tokenize quoted string', function() {
|
||||||
var str = "['\\'', \"\\\"\"]";
|
var str = "['\\'', \"\\\"\"]";
|
||||||
var tokens = lex(str);
|
var tokens = lex(str);
|
||||||
@@ -91,23 +83,6 @@ describe('parser', function() {
|
|||||||
expect(tokens[0].string).toEqual('\u00a0');
|
expect(tokens[0].string).toEqual('\u00a0');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should tokenize RegExp with options', function() {
|
|
||||||
var tokens = lex("/r/g");
|
|
||||||
var i = 0;
|
|
||||||
expect(tokens[i].index).toEqual(0);
|
|
||||||
expect(tokens[i].text).toEqual('r');
|
|
||||||
expect(tokens[i].flags).toEqual('g');
|
|
||||||
expect("rr".match(tokens[i].fn()).length).toEqual(2);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should tokenize RegExp with escaping', function() {
|
|
||||||
var tokens = lex("/\\/\\d/");
|
|
||||||
var i = 0;
|
|
||||||
expect(tokens[i].index).toEqual(0);
|
|
||||||
expect(tokens[i].text).toEqual('\\/\\d');
|
|
||||||
expect("/1".match(tokens[i].fn())[0]).toEqual('/1');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should ignore whitespace', function() {
|
it('should ignore whitespace', function() {
|
||||||
var tokens = lex("a \t \n \r b");
|
var tokens = lex("a \t \n \r b");
|
||||||
expect(tokens[0].text).toEqual('a');
|
expect(tokens[0].text).toEqual('a');
|
||||||
|
|||||||
@@ -52,6 +52,11 @@ describe('scope/model', function(){
|
|||||||
model.$eval('name="works"');
|
model.$eval('name="works"');
|
||||||
expect(model.name).toEqual('works');
|
expect(model.name).toEqual('works');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should not bind regexps', function(){
|
||||||
|
model.exp = /abc/;
|
||||||
|
expect(model.$eval('exp')).toEqual(model.exp);
|
||||||
|
});
|
||||||
|
|
||||||
it('should do nothing on empty string and not update view', function(){
|
it('should do nothing on empty string and not update view', function(){
|
||||||
var onEval = jasmine.createSpy('onEval');
|
var onEval = jasmine.createSpy('onEval');
|
||||||
|
|||||||
Reference in New Issue
Block a user