我的模式匹配某些字符串之間的最大1個空間,以查看它們是否匹配 -JS正則表達式匹配字符串與令牌
我想接受
a b cde f ghijk lm n
但拒絕
a b cd ef g
因爲後者在令牌之間有多個空白字符
我有這個正則表達式
new RegExp('^[a-zA-Z0-9\s?]+$', 'ig')
但它當前不會拒絕具有多於1個空白字符的字符串。
有沒有簡單的方法來增強我當前的正則表達式?
感謝
我的模式匹配某些字符串之間的最大1個空間,以查看它們是否匹配 -JS正則表達式匹配字符串與令牌
我想接受
a b cde f ghijk lm n
但拒絕
a b cd ef g
因爲後者在令牌之間有多個空白字符
我有這個正則表達式
new RegExp('^[a-zA-Z0-9\s?]+$', 'ig')
但它當前不會拒絕具有多於1個空白字符的字符串。
有沒有簡單的方法來增強我當前的正則表達式?
感謝
如果您的令牌只是ASCII字母或數字,使用
var regex = /^[a-z0-9]+(?:\s[a-z0-9]+)*$/i;
的模式匹配:
^
- 字符串的開始[a-z0-9]+
- 一個或多個字母或數字(?:\s[a-z0-9]+)*
- 的0+序列:
\s
- 任何空白,1個符號[a-z0-9]+
- 0+字母或數字$
- 字符串末尾這樣,你就限制了spac的數量在「單詞」之間只有1次出現。
如果您打算允許前/後空格,請在^
之後和$
之前加\s*
。
這將允許一個尾隨空白,因爲是? –
如果你想允許前/後空格,只需添加'\ s *':'var regex =/^ \ s * [a-z0-9] +(?:\ s [a-z0-9] +) * \ s * $/i;' –
試試這個辦法:
var str = "a b cde f ghijk lm n";
if(str.match(/\s\s+/)){
alert('it is not acceptable');
} else {
alert('it is acceptable');
}
注:作爲@Wiktor Stribizew在評論中提及,也許OP要拒絕包含這樣$
一些符號的字符串。所以它會更好地使用這個正則表達式的條件:
/[^a-zA-Z0-9\s]|\s\s+/
這允許像'$$$ $$$'這樣的字符串。 –
@WiktorStribiżew那麼它有什麼問題? 「$$$ $$$」僅包含一個空格,並且可以接受......我是對的嗎? – Shafizadeh
模式是'^ [a-zA-Z0-9 \ s?] + $'。它在哪裏接受'$'? –
你必須使用正則表達式嗎?爲什麼不檢查一下字符串是否有兩個空格?
的JavaScript
strAccept = "a b c def ghijk lm n";
strReject = "a b cd ef g";
function isOkay(str) {
return str.indexOf(' ') == -1 && str.indexOf(' ') >= 0;
}
console.log(isOkay(strAccept))
console.log(isOkay(strReject))
輸出
真
假
JS小提琴:https://jsfiddle.net/igor_9000/ta216m3v/1/
希望有幫助!
這也允許像'$$$ $$$'這樣的字符串。這就是爲什麼正則表達式是必要的。 –
@WiktorStribiżewOP表示要求接受帶有單個空格的字符串,因此$$$ $$$ *應該被接受。 –
不,要求字符串首先符合'^ [a-zA-Z0-9 \ s?] + $'模式,然後*然後*它們應該只在符號之間包含1個空格。通過修復正則表達式可以很容易地解決這個問題,而不需要冗餘代碼。 –
嘗試以下的正則表達式:
/^(\S+\s?)+$/im.test(text)
其中parameter text
是要測試的任何字符串。
OUTPUT:
a b cde f ghijk lm n <-- match
but reject <-- match
a b cd ef g <-- no match
答案可以在這裏找到: http://stackoverflow.com/questions/1630610/regex-match-only-letters-numbers-and-one-space-between-each-word –
@CameronMeador:是的,它可以找到,但沒有被理解。根本沒有解釋正確的正則表達式。此外,如果必須支持前/後空格,那麼該帖子不會提供工作解決方案。 –