Javascript 如何编写正则表达式来验证4个字符的字符串是否为非零二进制数?
我有一个字符串,例如Javascript 如何编写正则表达式来验证4个字符的字符串是否为非零二进制数?,javascript,php,regex,Javascript,Php,Regex,我有一个字符串,例如1001,它需要正好是4个字符,可以是0和1的任意组合,但不能都是零(都可以) 我想到: ^[01]{4}$ 无法工作,因为它接受0000 我将使用PHP或JavaScript来实现这一点 只是添加一个细节 我将使用它来验证多选项问卷的答案,然后再将其放入数据库,因此字符串的长度将为N,这取决于问题的选择数量 因此,提供通用解决方案的函数将非常有用。正则表达式: ^(1[01]{3}|01[01]{2}|001[01]|0001)$ 将起作用,并且不依赖于所有正则表达式实
1001
,它需要正好是4个字符,可以是0
和1
的任意组合,但不能都是零(都可以)
我想到:
^[01]{4}$
无法工作,因为它接受0000
我将使用PHP或JavaScript来实现这一点
只是添加一个细节
我将使用它来验证多选项问卷的答案,然后再将其放入数据库,因此字符串的长度将为N,这取决于问题的选择数量
因此,提供通用解决方案的函数将非常有用。正则表达式:
^(1[01]{3}|01[01]{2}|001[01]|0001)$
将起作用,并且不依赖于所有正则表达式实现中都不一定可用的先行或后视操作。尽管,现在问题已经被编辑以提供将要使用的语言:和正则表达式都否定了前瞻性。在这些语言中,regex^(?!0000)[01]{4}$
将起作用
当指定每个字符位置时,此答案顶部的正则表达式使用多个术语连续建立更明确的匹配。关键是匹配的四个字符字符串中必须至少有一个1
字符。一旦在字符串中遇到1
字符,我们不关心剩余的字符是什么,除了[01]
第一项1[01]{3}
将匹配以1
开头的任何四个0
和1
数字。这涵盖了所有所需的匹配字符串,其中第一个数字是1
,只留下以0
开头的所需字符串尚未定义为匹配
第二项01[01]{2}
将匹配以01
开头的任何四个0
和1
数字。这只剩下以00开头的所需字符串尚未定义为匹配
第三项001[01]{2}
将匹配0010
和0011
第四个术语0001
与其他术语不匹配的一个所需字符串相匹配
验证N个字符长的非零二进制字符串:
使用正则表达式比较和长度检查:
您的注释表明您有更长的(例如40个字符)类似字符串,在其他情况下需要匹配这些字符串
考虑到需要检查各种不同长度的字符串,最好创建一个能够测试多个不同长度的函数
在JavaScript中,一种可能性是:
function isNonZeroBinaryStringOfLengthN(str, len) {
//True if string is all 0 or 1 with at least one 1 and is the right length.
return (str.length == len && /^[01]*1[01]*$/.test(str) );
}
只使用内置函数将字符串解析为整数不是一个好主意:
在这种情况下,最好还是坚持使用基于regex的解决方案,而不是使用PHP或JavaScript。原因是这两个函数都没有正确验证字符串
在PHP中,命令:
echo intval('011134011',2);
console.log(parseInt("0101382730101",2));
印刷品
7
在JavaScript命令中:
echo intval('011134011',2);
console.log(parseInt("0101382730101",2));
印刷品:
5
这意味着,如果使用一个内部字符串->int解析函数,您仍然必须单独验证传递给任一函数的字符串,以匹配^[01]{n}$
。考虑到您必须这样做,您最好使用上面提到的单个正则表达式和长度测试,而不将字符串解析为int。它应该可以工作
^(?!0000)[01]{4}$
注意:使用gm
作为修饰符
阅读更多关于实际匹配字符但放弃匹配的内容,只返回结果:匹配或不匹配
模式说明:
^ the beginning of the string
(?! look ahead to see if there is not:
0000 '0000'
) end of look-ahead
[01]{4} any character of: '0', '1' (4 times)
$ end of the string
另一个简单的解决方案是:
^[01]{4}(?<=100|10|1)$
^[01]{4}(?为什么不将regex与&&val>0一起测试呢?整个过程都是这样的-将二进制数解析为整数,然后检查它是否大于0。同意,我有一些长度为40个字符的字符串,带有0和1,所以我猜regxexp不会单独剪切它。那么,您的实际问题是关于只有4个字符的二进制字符串,还是关于长度为长度是N个字符吗?长度是N个字符,我用它来验证多选项问卷的答案,然后再将其放入数据库。@Bohemian是regex^(?!0000){1}[01]{4}$
功能相同,还是我缺少了一个差异?@shree.pat18在测试它。它在PHP或javascript@shree.pat18根据您的模式,它应该是^(?(?!0000)){1}[01]{4}$
@Bohemian,说“终于”是不合理的在本例中。直到问题发布一小时后,才进行编辑,说明语言将是PHP或JavaScript。如果没有这些信息,假设正则表达式可以使用负前瞻性,则答案会对问题可能涉及的语言进行限制。@Braj我发布的链接di事实上,我的答案是使用JS的。不过,看到这里有一个更好的答案,我已经删除了我的答案。你确定javascript或php接受可变长度查找吗?