我正在尝试使用正则表达式测试作为文件路径的字符串,并且我希望正则表达式的测试在且仅当文件名前的字符(仅字母数字字符)为./
或./../
。我的问题是,如果路径包含诸如./../../
之类的目录,则测试返回true,因为该目录以./
开头。
我认为,如果仅对出现在所有字母数字字符之前的字符测试完全匹配,则可以消除此问题,但是我不知道该怎么做。
>代码:
function validPath(path) {
if (!/^(\.\/|\.\/\.\.\/)/.test(path)) {
path = "ERROR" //the path is not valid if ERROR is returned
}
return path; //the path is valid if the path is returned
}
我希望validPath('./../../index.html')
的输出为ERROR
,但输出为./../../index.html
答案 0 :(得分:1)
如果您知道所有文件名都以ASCII字母,数字或下划线开头,则可以扩展正则表达式以表示 <!-- TIMER START -->
<div class="timer-container">
<countdown #countdown [config]="{leftTime: 1800, notify: [ 1795 ]}" (finished)="finishTest()" (notify)="onNotify($event)">$!m!:$!s!</countdown>
<button (click)="stopTimer()" class="btn btn-link btn-sm">STOP</button>
<button (click)="store()" class="btn btn-link btn-sm">STORE</button>
</div>
<!-- TIMER END -->
或./
之后的下一个字符必须是的前导字符之一。文件名:
./../
这里if (!/^(\.\/|\.\/\.\.\/)\w/.test(path)) {
代表\w
。
如果您希望接受以点号或非ASCII字母开头的文件名,那么您将需要做更多的工作。
JavaScript regexes本身不处理非ASCII字母,但是您可以使用第三方regex引擎来处理。
另一种说法是
[A-Za-z0-9_]
,这意味着您不希望if (!/^(\.\/|\.\/\.\.\/)[^.]/.test(path)) {
或./
之后的第一个字符成为另一个点。这将处理具有非ASCII字母的文件名,但不会拾取以点开头的隐藏文件。
希望能使您更靠近!