我实际上有一个有角度的形式和内部的一些输入。目的是在云中上传文件。所以,我得到了一个目录路径的输入,它可能包含一些子目录。所以我在这样的范围内得到了我的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
。
答案 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)
,则会使匹配失败。