JS中的正则表达式,用于字母数字,点和连字符

时间:2012-09-30 04:58:51

标签: javascript regex

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

让我知道这是正确的。

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

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

此外,尽管dot在正则表达式的大多数位置都很特殊,但在方括号内部不是特殊,并且不应该在那里引用。 (此外,单个字符引用字符是 back -slash,而不是正斜杠。括号内的你的正斜率是开始和结束RE的相同字符,所以很可能过早地终止RE,从而导致解析错误!)因为我们完全抛弃它,所以它不再重要,它应该是正斜杠还是反斜杠,引用还是裸露。

正如你所注意到的,连字符在括号内有“范围”的特殊含义(例如:a-z),所以如果你想要一个文字连字符,你必须做一些不同的事情。按照惯例,有些东西是将字面连字符放在第一个括号内。

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

(正如你可能已经注意到的那样,几乎总有不止一种表达正则表达式的方式,因此它起作用,RE weenies花费尽可能多的时间来表达经济性和b)运行时性能让它“正确”。换句话说,你可以忽略我刚才所说的大部分内容,因为它对你来说并不重要。我认为真正重要的是a)摆脱那个无关的前向斜线和b)将文字连字符移动到方括号内的第一个字符。)

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

(还有一个想法:有时候标识符的第一个字符必须是一个alpha,在这种情况下你可能想要的是var regex = /^\w[-.\w\d]*$/;你可能想要一个不同的规则在任何情况下,第一个字符,因为上面的天真食谱将允许“ - ”和“。”作为长度为1的合法单词。)