You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			37 lines
		
	
	
		
			959 B
		
	
	
	
		
			JavaScript
		
	
		
		
			
		
	
	
			37 lines
		
	
	
		
			959 B
		
	
	
	
		
			JavaScript
		
	
| 
											9 months ago
										 | 'use strict'; | ||
|  | 
 | ||
|  | module.exports = function defFunc(ajv) { | ||
|  |   defFunc.definition = { | ||
|  |     type: 'string', | ||
|  |     inline: function (it, keyword, schema) { | ||
|  |       return getRegExp() + '.test(data' + (it.dataLevel || '') + ')'; | ||
|  | 
 | ||
|  |       function getRegExp() { | ||
|  |         try { | ||
|  |           if (typeof schema == 'object') | ||
|  |             return new RegExp(schema.pattern, schema.flags); | ||
|  | 
 | ||
|  |           var rx = schema.match(/^\/(.*)\/([gimuy]*)$/); | ||
|  |           if (rx) return new RegExp(rx[1], rx[2]); | ||
|  |           throw new Error('cannot parse string into RegExp'); | ||
|  |         } catch(e) { | ||
|  |           console.error('regular expression', schema, 'is invalid'); | ||
|  |           throw e; | ||
|  |         } | ||
|  |       } | ||
|  |     }, | ||
|  |     metaSchema: { | ||
|  |       type: ['string', 'object'], | ||
|  |       properties: { | ||
|  |         pattern: { type: 'string' }, | ||
|  |         flags: { type: 'string' } | ||
|  |       }, | ||
|  |       required: ['pattern'], | ||
|  |       additionalProperties: false | ||
|  |     } | ||
|  |   }; | ||
|  | 
 | ||
|  |   ajv.addKeyword('regexp', defFunc.definition); | ||
|  |   return ajv; | ||
|  | }; |