我需要一个允许字母、连字符 (-)、引号 (')、点 (.)、逗号 (,) 和空格的正则表达式。这就是我现在所拥有的
^[A-Za-z\s\-]$
谢谢
我\s
从你的正则表达式中删除了,因为你说的是空格,而不是空格。随意将其放回原处,将末尾的空间替换为\s
否则非常简单:
^[A-Za-z\-'., ]+$
它匹配字符串的开头。集合中的任何字符 1 次或多次,以及字符串的结尾。如果您想知道,您不必.
在一组中逃脱。
您非常接近,请尝试以下操作:
^[A-Za-z\s\-'.,]+$
请注意,我假设您要匹配包含一个或多个这些字符的字符串,因此我+
在字符类之后添加了“重复前一个元素一次或多次”的意思。
请注意,这目前还允许除空格之外的制表符和换行符,因为\s
它将匹配任何空白字符。如果您只想允许空格,请将其更改为^[A-Za-z \-'.,]+$
(仅替换\s
为空格)。
你可能试过了new RegExp("^[A-Za-z\s\-\.\'\"\,]$")
。但是,您在那里有一个字符串文字,而反斜杠只是转义了以下字符 - 仅对定界引号(和反斜杠)是必需的。
"^[A-Za-z\s\-\.\'\"\,]$" === "^[A-Za-zs-.'\",]$" === '^[A-Za-zs-.\'",]$'
但是,该范围s-.
无效。因此,您需要转义反斜杠以在 RegExp 构造函数中传递带有反斜杠的字符串:
new RegExp("^[A-Za-z\\s\\-\\.\\'\\\"\\,]$")
相反,正则表达式文字更易于阅读和编写,因为您不需要对正则表达式转义字符进行字符串转义。此外,它们仅在脚本“编译”期间被解析一次 - 每次评估该行时都不需要执行任何操作。仅当您想动态构建正则表达式时才需要使用RegExp
构造函数。所以使用
/^[A-Za-z\s\-\.\'\"\,]$/
它会起作用。此外,您不需要在字符类中转义这些字符中的任何一个- 所以它只是
/^[A-Za-z\s\-.'",]$/