regex - 正则表达式逻辑

标签 regex angular typescript components

我正在使用 Angular 6 开发 Web 应用程序。我有一个问题: 我正在创建一个自定义输入组件(用于文本输入),例如:

@Component({
  selector: 'input-text',
  templateUrl: './input-text.component.html'
  ]
})
export class InputTextComponent {

  @Input() pattern?: string;

}

我希望用户可以通过这种方式插入正则表达式来验证输入字段:

<input-text pattern="^[a-z0-9_-]{8,15}$"></input-text>

我的组件的模板是这样定义的:

<input type="text" [attr.pattern]="pattern"/>

不幸的是,我对正则表达式一无所知。 我想做两件事:

1 - 创建一个方法来检查正则表达式的有效性并更改视觉样式。

2 - 确保如果将输入(带有 pattern 字段)插入到表单中,则属性 form.valid 保持为假,直到表达式有效。 感谢您的帮助!

最佳答案

  1. 检查正则表达式的有效性

您可以简单地捕获 RegExp 构造函数在实例化时抛出的异常。

try {
  const regex = new RegExp(pattern);
} catch (error) {
  // If it goes here, then the regex model is not correct
  console.error(error.message)
}
  1. 改变视觉风格

您可以简单地使用 ngClass 属性来更改您的输入样式。 如果输入catch语句,设置一个样式变量,像这样改变类

private hasBadInput: boolean;
// [...]
catch (error) {
  hasBadInput= true;
}

然后在这种情况下应用一个特定的类:

<input-text [ngClass]="{'yourErrorClass': hasBadInput}"><input-text>
  1. 表格有效性

您使用[attr.pattern] 做得很好,表单应该自动考虑输入的模式。您应该先用硬写的正则表达式尝试您的表单,然后再使用输入的。
关注这个official guideline创建 Angular 2+ 表单。

关于regex - 正则表达式逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53396321/

相关文章:

javascript - 高级检查字符串中的字母大小写(大写/小写)

regex - Apache 位置匹配通配符 URL

javascript 检查正则表达式是否适用

javascript - visual studio typescript 与angular 2冲突

html - 无法获取html页面的表单值到 typescript 页面 Angular 6

javascript - 如何在 typescript 中注释生成器函数

PHP正则表达式: match several inclusion/exclusion rules for matches consisting of a complex character set

angular - 如何确保在 2 个或更多 Observable 返回数据之前不会执行函数?

javascript - 通过其他数组的索引过滤数组对象

javascript - 获取对象的所有可能组合,其中值的总和与数字匹配