2016-08-29 195 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