我的模式匹配某些字符串之间的最大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:是的,它可以找到,但没有被理解。根本没有解释正确的正则表达式。此外,如果必须支持前/后空格,那么该帖子不会提供工作解决方案。 –