Шаблон регулярного выражения в Typescript - PullRequest
0 голосов
/ 22 ноября 2018

Этот шаблон работает, но это противоположный способ, чем я предполагал, как я могу изменить его, чтобы при совпадении шаблона это приводило к ошибке?Спасибо.

   <mat-form-field style="text-align: center">
                <input type="text" pattern="^([aA]\d{6})" placeholder="id" matInput="text" formControlName="id"
                  name="id" required> 
              </mat-form-field>

1 Ответ

0 голосов
/ 22 ноября 2018

Ваш текущий шаблон соответствует строке, которая начинается с a или A и имеет строго 6 цифр.^ является избыточным в регулярном выражении pattern, так как оно привязано по умолчанию.

Таким образом, фактически текущее регулярное выражение равно ^[Aa]\d{6}$, и для записи обратного шаблона HTML5 вы можете использовать

pattern="(?![aA]\d{6}$).*"

Этот шаблон будет проанализирован как шаблон /^(?:(?![aA]\d{6}$).*)$/ (с модификатором u в Chrome, Firefox и других браузерах, поддерживающих эту функцию).

При отрицательном прогнозе (?![Aa]\d{6}$) произойдет сбой любой строки, которая начинается с a или A и затем имеет 6 цифр до конца.

.* соответствует любым 0+ символам,Используйте .+, чтобы соответствовать любому 1 или более символовЭта часть является обязательной, поскольку регулярное выражение HTML5 должно соответствовать всему вводу.

HTML5 demo:

input:valid {
  color: black;
  border: 5px solid #dadadada;
  border-radius: 7px;
}
input:invalid {
  color: navy;
  outline: none;
  border-color: #ff1050;
  box-shadow: 0 0 10px #ff0000;
}
<form name="form1"> 
 <input pattern="(?![aA]\d{6}$).*" title="Please enter a valid string." placeholder="Please enter valid text" />
 <input type="Submit"/> 
</form>
...