ng-pattern / ng-show AngularJS

时间:2017-08-21 12:34:18

标签: javascript angularjs regex

我实际上有一个有角度的形式和内部的一些输入。目的是在云中上传文件。所以,我得到了一个目录路径的输入,它可能包含一些子目录。所以我在这样的范围内得到了我的JS的正则表达式:$scope.regex = "^[^\/]\S+$";

这个正则表达式会接受任何字符,如果它不是第一个字符的“/”。

这是我的角度代码:

<input name="directory" id="directory" type="text" class="form-control" ng-pattern="regex" ng-model="directoryName" placeholder="Enter a directory name"/>

<span class="error" ng-show="uploaderForm.directory.$error.pattern">directory path can't start by a "/"</span>

通常,使用此正则表达式,此路径应该是成功的:

directory/subdirectories/filename...

而且这个不应该:

/directory/subdirectories/filename...

但我的问题是,当我写这样的东西:test / subtest / blablabla时,我得到了ng-show错误......

请注意,我的输入也可以是单个字符,例如a

1 个答案:

答案 0 :(得分:1)

使用

$scope.regex = "^[^/]\\S*$";

或其等效的正则表达式文字符号:

$scope.regex = /^[^\/]\S*$/;

第一个问题是通过加倍反斜杠来解决的。要在JS字符串文字中定义文字\,您需要将其加倍。请参阅this thread

第二个问题是用+(0或更多)量词替换*(1或更多)来解决的。 \S+匹配一个或多个非空白字符,\S*将匹配除空白之外的零个或多个字符。

<强>详情

  • ^ - 字符串开头
  • [^\/] - 除/
  • 以外的任何字符
  • \S* - 零个或多个非空白字符
  • $ - 字符串结束。

万一你也想要一个空字符串,你可以使用一个基于前瞻的正则表达式:

$scope.regex = /^(?!\/)\S*$/;

此处,如果第一个字符为(?!\/),则/是一个负面预测,如果第一个字符为if platform.system() == 'Windows': pexpectmodname = "winpexpect" from winpexpect import winspawn as spawn else: pexpectmodname = "pexpect" from pexpect import spawn pexpectmod = __import__(pexpectmodname) ... # connect shellCmd = "ssh %s %d -l %s %s" % (portParam, port, username, server.host) self.spawn = spawn(shellCmd, timeout=self.timeout, env=os.environ, ignore_sighup=False) ... # DO WORK WITH SSH ... # close ssh connection #1 (send exit) self.spawn.sendline('exit') index = self.spawn.expect([pexpectmod.EOF, "(?i)there are stopped jobs"]) if index == 1: self.spawn.sendline("exit") self.spawn.expect([pexpect.EOF]) # close ssh connection #2 (check isalive, send exit and close) if self.spawn.isalive(): self.spawn.sendline('exit') self.spawn.close() # close ssh connection #3 (send sigkill) import signal self.spawn.kill(signal.SIGKILL) ,则会使匹配失败。