ng-pattern允许字母、数字、点号、下划线和破折号。

5

如何仅使用ng-pattern实现输入限制:只允许输入字母数字下划线破折号( . _ -)

已尝试以下方法:

更新:

$scope.validationPattern = '/^[a-zA-Z\d\-\_]+$/';

<input ng-model="model" type="text" ng-pattern="{{validationPattern}}" />

你尝试了什么模式和代码? - Wiktor Stribiżew
@WiktorStribiżew:请查看更新后的问题。 - el.severo
太好了,那什么不起作用?请注意模式中没有点(在您的编辑后)。尝试像这样使用'/^[a-zA-Z0-9._-]+$/'并使用<input ng-model="model" type="text" ng-trim="false" ng-pattern="{{validationPattern}}" />(添加ng-trim="false")。 - Wiktor Stribiżew
3个回答

13

根据您的要求,您需要在模式中添加一个点:

$scope.regex = '^[a-zA-Z0-9._-]+$';

并且在 <input> 标签中添加 ng-trim="false",以禁止首/尾空格。

请参见此 plunkr


还有一个问题,如果我想加入斜杠(/),为什么 ^[a-zA-Z0-9._-/]+$ 不起作用? - el.severo
好的,只需遵循以下策略之一:1)转义连字符并不关心您在字符类末尾添加什么或2)始终将连字符保留在字符类末尾。如果您在字符串文字中进行转义,请使用双反斜杠。 - Wiktor Stribiżew
谢谢!在plunker中它可以工作,但在我的项目中不行。我得到了:[$parse:lexerr] Lexer Error: Unexpected next character at columns 0-0 [^] in expression [^[a-zA-Z0-9._/-]+$] ,有什么想法吗?这是输入的样子:<input ng-model="model" type="text" ng-blur="onChange(model)" ng-change="didEndChanges(model)" ng-class="{'invalid': !isFieldValid}" ng-pattern="^[a-zA-Z0-9._/-]+$" ng-trim="false" data-i18n-attr="{placeholder: 'common.scanData' }" ng-disabled="disabled" placeholder="Scan data" class="ng-pristine ng-untouched ng-valid ng-valid-pattern" style=""> - el.severo
尝试使用 ng-pattern="/^[a-zA-Z0-9._\/-]+$/" - Wiktor Stribiżew

4
[a-zA-Z0-9][A-Za-z0-9._-]*

这个有效


2
/^[a-zA-Z0-9 ._-]+$/

如果这个正则表达式不能直接匹配ng-pattern,那么您需要进行必要的调整,如下:

在控制器中添加:

$scope.pattern = /^[a-zA-Z0-9 ._-]+$/;

现在在html中使用ng-pattern="pattern"

测试使用:http://www.regextester.com/

接受数字、字母和三个符号(.-_)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接