具有双引号的正则表达式的ng-pattern无法正确转义

loo*_*nes 5 javascript regex angularjs ng-pattern angularjs-ng-pattern

我对^ [^ \ ./:* \?\“ <> \ |] {1} [^ \ /:* \?\” <> \ |] {0,254} $的正则表达式进行ng模式验证它基本上测试了文件路径和限制中的无效字符。但是当我将ng-pattern指定为

 ng-pattern = "^[^\\\./:\*\?\"<>\|]{1}[^\\/:\*\?\"<>\|]{0,254}$"
Run Code Online (Sandbox Code Playgroud)

,ng模式会以不正确的方式显示正则表达式。正确实现此目标的任何帮助

Wik*_*żew 3

首先,你的正则表达式包含太多转义符号,而你只需要转义"here和\\.

然后,为了匹配"内部ng-pattern属性,您可以将其定义为\x22or &quot;

var app = angular.module("app", []);
Run Code Online (Sandbox Code Playgroud)
<html ng-app="app">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
</head>
<body>
<form name="form">
  <p>Enter text to validate:</p>
  <input type="text" ng-model="name" name="name" ng-pattern="/^[^\\\\./:*?&quot;<>|][^\\\\/:*?\x22<>|]{0,254}$/" ng-trim="false" />
  <div ng-show="form.name.$error.pattern">Text doesn't match with ng-pattern!</div>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

您还可以通过在控制器中使用常规字符串文字定义正则表达式来解决问题,其中您可以使用'.."..'or "..\"...",然后{{...}}ng-pattern属性中使用变量名称。请注意,要匹配文字,\您需要在正则表达式模式中使用 4 个反斜杠。

var app = angular.module("app",[]);

app.controller("FormCtrl", function($scope) {
  $scope.regex = "/^[^\\\\./:*?\"<>|][^\\\\/:*?\"<>|]{0,254}$/";
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
    <form name="theForm" ng-controller="FormCtrl" novalidate>
        <input type="text" name="filename" placholder="filename" ng-model="filename" ng-pattern="{{regex}}" required />
        <div class="error"
                     ng-show="(theForm.filename.$dirty || attempted) && theForm.filename.$invalid">
                  <small class="error text-danger"
                         ng-show="theForm.filename.$error.required">
                    Please enter a file name.
                  </small>
                  <small class="error text-danger"
                         ng-show="theForm.filename.$error.pattern">
                    Please enter a valid file name.
                  </small>
                </div>
    </form>
</div>
Run Code Online (Sandbox Code Playgroud)