1

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.4/angular.min.js"></script>

<div ng-app>
    <form class="edit-segment edit-form" name="form">
        <input type="text" class="form-control" ng-model="dname" name="name" maxlength="100" ng-pattern="/[A-z0-9 ]+/" ng-required='true' />
        <output>{{form}}</output>
        <output>{{dname}}</output>
        <output>{{form.name.$valid}}</output>
    </form>
</div>

模式是:
/[A-z0-9]+/

出于某种原因,这个注入角度的 html 没有按照我期望的方式运行。我期望发生的是,一旦用户输入非单词、非数字、非空格字符,输入就会变得无效,所以 $form.name.$valid 应该是假的。

相反,只要你输入的内容包含字母、数字或空格,输入变为 $valid 就变为真。
所以:
lkajskdjf<.?{}
是有效的

.,.,..,{}{][].,
无效。

.,.,..,{}{][].,\
是有效的。

?>?./..,./9k
有效。

kjkljd lkjsdf 90
有效。

唯一应该有效的是最后一个......我对ng-pattern的理解显然是错误的,只要输入的字符与ng-pattern中的正则表达式匹配,输入才有效。

这里发生了什么?
为什么我期望的行为不是我得到的行为?

4

1 回答 1

3

模式应该是/^[A-z0-9 ]+$/,其中^$符号分别表示“开始于”和“结束于”。这意味着正则表达式将完全匹配并且仅匹配您的字符类。

于 2015-07-21T20:04:37.800 回答