【问题标题】:Angular 2 NOT only whitespaces in textareaAngular 2不仅文本区域中的空格
【发布时间】:2018-05-31 18:26:12
【问题描述】:

我目前正在尝试验证角度 2 中的文本区域以 不只有 空格或换行符(/n 或 /r)

我已经尝试过this 方法,但我担心当将它与<textarea> 一起使用时,任何换行符都会使输入无效,即使其中有值,所以当有人点击输入创建新行时,有效模式转化为无效的。

更多信息请参见this plunker

基本上:

<textarea autocomplete="off" [formControl]="newComment" id="comment"></textarea>

<button type="submit" [disabled]="!newComment.value || newComment.valid">
    Comment
</button>

newComment = new FormControl('', [Validators.pattern("\\s*")]);

所以我的意思是我让它工作,但我确定我做错了,因为当我检查 textarea 时,ng 值显示 ng-invalid 并且我确定我在混合概念。

对我来说,当它无效时,我们应该禁用输入,而不是相反,但是因为 Validators.pattern 是关于与该模式匹配的东西,所以我们必须使用 !并反转 ng-valid 属性的输出。我说的对吗?

非常感谢您的帮助。

编辑:我知道当有空格或换行符时我的逻辑匹配,但这是因为这是丢弃“空”文本区域的最简单方法,但我正在寻找更清晰的方法这样做。

【问题讨论】:

    标签: angular angular-forms angular-validation


    【解决方案1】:

    不久前我遇到了类似的问题,唯一的解决方法是创建一个自定义函数来验证字段,因为正则表达式会使用其他所需的字符(如换行符)使文本区域无效:

    export function validateEmptyField(c: FormControl) {
      return c.value && !c.value.trim() ? {
        required: {
          valid: false
        }
      } : null;
    }
    

    用法:

    newComment = new FormControl('', [validateEmptyField]);
    

    【讨论】:

    • 感谢法尔斯!这实际上是我的第二选择,但我拒绝承认使用验证器模式和正则表达式没有更简单的解决方案。我将应用您的建议并将您的解决方案标记为已接受的答案。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 2017-03-01
    • 1970-01-01
    相关资源
    最近更新 更多