1

我需要一个 JS 正则表达式,它应该只允许包含字母数字、点和连字符的单词。

让我知道这是正确的。

var regex =  /^[a-zA-Z_0-9/.-]+$/;
4

2 回答 2

3

几乎。这也将允许下划线和斜杠。从您的范围中删除那些:

var regex =  /^[a-zA-Z0-9.-]+$/;

这也不会匹配空字符串。这可能是你想要的,但也可能不是你想要的。如果不是您想要的,请更改+*.

于 2012-09-30T05:00:42.130 回答
1

我要做的第一个简化是使用“单词字符”速记“\w”,它与“a-zA-Z”大致相同,但更短,并且当您移动到其他语言时自动保持正确,包括一些重音字母字符和“数字字符”速记“\d”。

此外,虽然点在正则表达式中的大多数地方都很特殊,但它在方括号内并不特殊,不应该在那里引用。(此外,单字符引号字符是反斜杠而不是正斜杠。括号内的正斜杠与开始和结束 RE 的字符相同,因此可能会过早终止 RE,因此导致一个解析错误!)因为我们完全把它扔掉了,它应该是正斜杠还是反斜杠、引用还是裸露都不再重要了。

正如您所注意到的,连字符在括号内具有“范围”的特殊含义(例如:az),因此如果您想要一个文字连字符,您必须做一些不同的事情。按照惯例,先将文字连字符放在括号内。

所以我的结果是var regex = /^[-.\w\d]+$/;

(您可能已经注意到,表达正则表达式的方法几乎总是不止一种,因此它可以工作,并且 RE 小伙伴们在 a) 表达经济性和 b) 运行时性能上花费的时间与他们在获取它时所做的一样多“正确的”。换句话说,你可以忽略我刚才所说的大部分内容,因为这对你来说并不重要。我认为真正重要的是a)摆脱多余的正斜杠和b)将文字连字符移动到方括号内的第一个字符。)

(另一个想法:在接受字母字符和连字符时,下划线也可以接受......所以你真的是想有那个下划线吗?)

(另一个想法:有时标识符的第一个字符必须是一个字母,在这种情况下,您可能想要的是var regex = /^\w[-.\w\d]*$/;在任何情况下您都可能希望对第一个字符使用不同的规则,因为上面的幼稚配方允许“- " 和 "." 作为长度为 1 的合法词。)

于 2012-10-01T01:20:12.670 回答