角正则表达式验证器无法正常工作

时间:2018-07-19 18:23:47

标签: javascript regex angular

我为纬度输入(在-90和90之间,并且排除了特殊字符(e,+,-等))创建了以下验证器。我已经测试过正则表达式,并且可以正常工作。但是,当我在输入上使用它时,它只会验证数字范围并允许使用特殊字符(例如'12e')。

Working

Not Working

function validateLatCoordFactory(): ValidatorFn {
  return (formControl: AbstractControl) => {

    if(!formControl.value) return;

    let LAT_COORD_REGEXP = new RegExp(/^(\\+|-)?(?:90(?:(?:\.0{1,6})?)|(?:[0-9]|[1-8][0-9])(?:(?:\.[0-9]{1,6})?))$/);

    return LAT_COORD_REGEXP.test(formControl.value) ? null : {
      validLatCoord: {
        valid: false
      }
    };
  };
}

@Directive({
  selector: '[validLatCoord][ngModel],[validLatCoord][formControl]',
  providers: [
    {provide: NG_VALIDATORS, useExisting: forwardRef(() => LatCoordValidatorDirective), multi: true}
  ]
})

export class LatCoordValidatorDirective implements Validator {

  validator: ValidatorFn;

  constructor() {
    this.validator = validateLatCoordFactory();
  }

  validate(formControl: AbstractControl) {
    return this.validator(formControl);
  }

}

任何帮助将不胜感激。 BT7

1 个答案:

答案 0 :(得分:0)

如果您想检查该值是否在-90到90之间(包括-90和90),那么您不应该首先使用正则表达式。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<section style="width:100%; height:auto; visibility:hidden;">
  <div class="section_menu_mada_page_row_container" style="">
    <span class="section_menu_mada_page_row_name" style="">' + item.name + '</span>
    <span class="section_menu_mada_page_row_half" style="">' + item.half + '</span>
    <span class="section_menu_mada_page_row_full" style="">' + item.full + '</span>
  </div>
</section>

这将检查3件事:

  1. 该值可以解析为浮点数
  2. 解析后的值与初始值相同(例如,输入不是1.2341e23523)
  3. 该值介于-90到90之间(包括端值)