大家好,
我正在尝试编写一个脚本,该脚本接受输入并用密码对其进行加密。 为此,输入文本必须是二进制的。 我向 ChatGPT 寻求帮助,它推荐
if ( Matches Reg Expr(input, "^[01]+$"),
Show("Valid"),
Show("Not Valid"));这是行不通的,我正在尝试找出原因。 我还试图找出一种方法来检查数字是否为二进制,因此任何帮助将不胜感激
顶部丢失了一行:
CheckIfBinary = Function( {input},
{isbinary},
If( //If the string only contains 0 and 1 and is at least 1 character long
!Is Missing( Regex( input, "^[01]+$" ) )
, //then return 1
isbinary = 1
, //otherwise return 0
isbinary = 0
);
Return( isbinary );
);
CheckIfBinary( "123" );
CheckIfBinary( "10" );
直到现在我才避免使用 ChatGPT 的自动完成功能。 这很有趣......无论如何它找到了正确的正则表达式。
@LatentHyena653 - JMP 的正则表达式返回“不匹配”的缺失值,否则返回匹配的文本。 缺失值测试必须使用 isMissing 函数完成。 大多数其他语言对于使用正则表达式都有不同的细节,因此这并不奇怪。
此外,JMP 有一个 hex() 函数,可将文本转换为十六进制字符串:
hexData = hex("ABC");
binaryData = substitute(hexData,
"0","0000",
"1","0001",
"2","0010",
"3","0011",
"4","0100",
"5","0101",
"6","0110",
"7","0111",
"8","1000",
"9","1001",
"A","1010",
"B","1011",
"C","1100",
"D","1101",
"E","1110",
"F","1111",
"????"
);
show(hexData,binaryData);
// hexData = "414243";
// binaryData = "010000010100001001000011";
并且,如图所示,substitute() 可以将十六进制字符串转换为二进制字符串。
最后,请注意,1和0的二进制串实际上是二进制数据的字符串表示。 如果您需要使用实际的二进制数据,JMP 还具有 blob 数据类型。 但使用可打印的 1 和 0 要容易得多。
这应该有效:
If( //If the string only contains 0 and 1 and is at least 1 character long
!is missing(regex( input, "^[01]+$" ))
, //then return 1
isbinary= 1
, //otherwise return 0
isbinary=0
);
return(isbinary);
);
CheckIfBinary("123");
CheckIfBinary("10");