2016-08-29 154 views
1

我想在JavaScript中创建一个正则表达式的测试,将测试一个字符串包含任何字符:正则表达式匹配符号& - 。 “

a...z A..Z 0..9 and & - . ' 

我必须这样做,但不能匹配:

^[a-zA-Z0-9&.-] 

完整代码:

<field-validator type="regex"> 
     <param name="expression">^[a-zA-Z0-9&.-]+$</param> 
     <param name="caseSensitive">false</param> 
     <message key="format.name" /> 
    </field-validator> 
+0

你的意思是它必须匹配第一个正则表达式,但不是第二个? –

+0

你的字符串是以什么开头的? – chris85

+2

所以你想匹配'& - 。 '':那你为什么要找'a-zA-Z0-9',为什么不列出单引号?似乎微不足道的是,你应该删除这些字符并添加引号,否则我完全错过了你的观点。 – trincot

回答

2

您正在使用XML文件中的正则表达式,所以最好的办法是为了使用它里面的文字&'符号使用CDATA块。要么两个都可以工作:

<param name="regex"><![CDATA[[a-zA-Z0-9'&.-]]]></param> 

或(如一个完整的字符串匹配是必需的):

<param name="regex"><![CDATA[(?s).*[a-zA-Z0-9'&.-].*]]></param> 

由于您使用<param name="caseSensitive">false</param>,你甚至可以省略模式的A-Za-z

请注意,(?s)启用DOTALL模式,以便.可以匹配任何字符,包括换行符。

2

这似乎工作:

[\&\-\.'] 

将在字母和数字:

[a-zA-Z0-9\&\-\.'] 

(更新后评论)

+0

'& - 。'是范围选择器。逃生' - '。 – Tushar

0

如果你想测试输入包含任何地方这些字符之一,删除正则表达式的主要^。这就是说,任何这些字符都必须是的第一个字符

此外,您的正则表达式不包含字符'

1

您必须\escape特殊字符。

[a-z0-9\-&\.'] 
+0

请注意,如果您将连字符作为最后一个字符,则不需要转义。 – trincot