我必须使用正则表达式验证输入字段(类型编号)的用户输入。
我会发现以下动态值:
一个例子: 最低:10;最大值:100;增量:10
动态增量为10的允许用户输入应为:
10 - 20 - 30 - 40 - 50 - 60 - 70 - 80 - 90 - 100
其他例子:
我已经尝试了几个正则表达式,但是甚至没有使用动态值(不同的数字长度/小数)。也许更容易让一个带数字,一个带小数的数字。
感谢您的帮助!
答案 0 :(得分:3)
将input
标记与适当的属性一起使用。 HTML5为您提供了step
attribute。
<input type="number" min=10 max=100 step=10 />
<input type="number" min=0 max=2000 step=100 />
<input type="number" min=0 max=3.4 step=0.2 />
答案 1 :(得分:0)
快速回答你的问题(因为你说过角度,我认为你需要它用于JS):
function tenToHundred(num){
return /^[1-9]{1}0{1}$|^100$/.test(num);
}
for(var i=1;i<=11;i++)console.log(tenToHundred(i*10));//10 ~ 100 test
关于这些检查的建议(基于你的例子),REGEX作为工具用于字符串模式检查\匹配等...它不太适合数值计算,所以也许你应该考虑其他方法进行验证。 例如 - 使用remainder运算符
function tenToHundred(num){
var min=10, max=100, increment=10;//when need to maintain - just change those
return num>=min && num<=max && num%increment==0;
}
for(var i=1;i<=10;i++)console.log(tenToHundred(i*10));//10 ~ 100 tests
通过这种方式,您可以更轻松地维护代码。
答案 2 :(得分:0)
<input type="number" step="10" validate-step />
然后我写了一个解析器:
angular
.module( '....validateStep', [] )
.directive( 'validateStep', ValidateStepDirective );
/**
* @namespace ValidateStepDirective
* @example <validate-step></validate-step>
* @memberOf Directives
*/
function ValidateStepDirective(){
return {
require: 'ngModel',
link: ValidateStepDirectiveController
};
}
function ValidateStepDirectiveController( scope, element, attrs, ctrl ){
var step;
if( attrs.step) {
step = parseFloat( attrs.step );
}
function isValidStep( value, step ) {
var checkValue = value * 100;
// fixing js multiplication issue (2.3*100=229.999999)
checkValue = checkValue.toFixed(0);
var checkStep = step * 100;
return checkValue%checkStep === 0;
}
function stepValidator(viewValue){
if( step && isValidStep(viewValue, step) ){
ctrl.$setValidity( 'step', true );
return viewValue;
}else{
ctrl.$setValidity( 'step', false );
// if invalid, return undefined
// (no model update happens)
return;
}
}
ctrl.$parsers.unshift( stepValidator );
}
我希望我可以用我的解决方案帮助别人。