在javascript中编写特定模式

时间:2017-10-26 11:10:17

标签: javascript html regex typescript

我有一个html输入,例如:

<div class="form-group">
 <div class="col-sm-6">
  <label for="inputCalculator"
         class="control-label">Calculation:</label>
  <input class="form-control"
         type="text"
         [(ngModel)]="properties.calculator"
         (keyup)="onKeyUpCalculator($event.key, 0)"
         placeholder="Enter Calculator:"
         id="inputCalculator"
         name="inputCalculator"
         autocomplete="off" />
  <div *ngIf="calculatorError"
        class="alert alert-danger">
        The pattern is incorrect
 </div>
</div>

如果输入文本来自这种模式,我想检查js:

可以在字符串 OR X开头的X开头,然后是以下运算符之一: +, - ,*,/ ,之后运营商应该有一个号码(浮动号码)和号码后的运营商以及运营商之后的另一个号码等等。

以下是有效输入的一些示例:

  1. X
  2. X * 5466
  3. X +二万四千五百二十五分之二千一百四十五* 3566
  4. X-2345 +四万六千七百零四分之三万一千一百零一* 2 *8分之2
  5. X + 4.2-43 / 88.33 * 123.11 + 5555
  6. 我如何在javascript中编写此模式?

1 个答案:

答案 0 :(得分:2)

匹配所有这些输入的正则表达式模式是。

/^X((\*|\+|\/|-)\d+)*$/

或更短:

/^X([\*\+\/-]\d+)*$/

您可以对其进行测试here

^X // start with X
   ( // start a new group for all the rest
      [\*\+\/-] // one of *,+,/,-
      \d+ // at least one digit
   )* // match stuff like *123 0 or multiple times
 $ // match the end of the line

&#13;
&#13;
console.log('Should match');
console.log('X is ' + isCorrect('X'));
console.log('X*5466 is' + isCorrect('X*5466'));
console.log('X+2145/24525*3566 is ' + isCorrect('X+2145/24525*3566'));
console.log('X-2345+31101/46704*2*2/8 is ' + isCorrect('X-2345+31101/46704*2*2/8'));

console.log('Should not match');
console.log('Xi is ' + isCorrect('Xi'));

function isCorrect(input) {
 return input.match(/^X([\*\+\/\-]\d+)*$/) == null ? false : true
}
&#13;
&#13;
&#13;

对于浮点数,我们可以将正则表达式的\d+部分替换为与浮点数相匹配的部分,例如[-+]?[0-9]*\.?[0-9]+

正则表达式将是:

/^X([\*\+\/-][-+]?[0-9]*\.?[0-9]+)*$/