我需要一个JS正则表达式,应该只允许有字母数字,点和连字符的单词。
让我知道这是正确的。
var regex = /^[a-zA-Z_0-9/.-]+$/;
差不多了。 这也将允许下划线和斜杠。 从范围中删除:
var regex = /^[a-zA-Z0-9.-]+$/;
这也将不匹配空字符串。 那可能是你想要的,但也可能不是你想要的。 如果不是您想要的,请将+
更改为*
。
我要做的第一个简化是使用“单词字符”速记'\w',它与'a-za-z'差不多,但更短,并且当你移动到其他语言(包括一些重音字母字符)和“数字字符”速记'\d'时自动保持正确。
另外,虽然点在正则表达式中的大多数地方都是特殊的,但在方括号内并不特殊,不应该在方括号内引用。 (此外,单字符引号字符是反斜杠,而不是正斜杠。括号内的正斜杠与RE开头和结尾的字符相同,因此很可能过早地终止RE,从而导致解析错误!) 因为我们完全抛弃了它,所以它应该是正斜杠还是反斜杠,是带引号还是裸露的都不再重要了。
正如你所注意到的,连字符在括号内有一个特殊的“范围”意思(例如:a-z),所以如果你想要一个字面上的连字符,你必须做一些不同的事情。 按照惯例,某件事要先把字面连字符放在括号内。
所以我的结果是var regex=/^[-.\w\d]+$/;
(正如您可能已经注意到的,表达正则表达式的方法几乎总是不止一种,所以它能正常工作,并且用户在以下两个方面花费的时间是一样的:a)表达式的经济性和b)运行时性能,就像他们在使表达式“正确”上花费的时间一样多。换句话说,您可以忽略我刚才所说的大部分内容,因为这些内容对您来说并不重要。我认为真正重要的是a)去掉多余的正斜杠,b)将文字连字符移到方括号内的第一个字符。)
(另一个想法是:在接受字母字符和连字符时,下划线也是可以接受的。。。所以你真的想要下划线吗?)
(还有另一个想法:有时标识符的第一个字符必须是alpha,在这种情况下,您可能需要var regex=/^\w[-.\w\d]*$/;
您可能需要对第一个字符使用不同的规则,因为上面的简单方法允许“-”和“。”作为长度为1的合法单词。)