在我的函数中我有一个字符串参数,通常表示两位十六进制数,如5E或0A 我如何检查这个字符串是否真的是一个数字而没有别的(比如G9或NB或abcdef),并且所有字符都是用big(A而不是a)写的? 谢谢你的帮助
答案 0 :(得分:4)
您可以尝试正则表达式:
exports.notFound = function(req, res, next) {
res.status(404);
res.render('not-found');
};
如果您接受大写十六进制符号( String source = "AC";
Boolean result = Regex.IsMatch(source, "^[0-9A-Fa-f]{2}$");
但不接受A..F
)
a..f
如果您接受一个十六进制符号(例如 Boolean result = Regex.IsMatch(source, "^[0-9A-F]{2}$");
,A
,0
)以及双符号(C
,AA
,{{ 1}})
3F
答案 1 :(得分:2)
正则表达式怎么样?
private bool IsHex(string input, int maxDigits = 2)
{
return !String.IsNullOrWhiteSpace(input) &&
maxDigits > 0 &&
Regex.IsMatch(input, String.Format("^[A-F0-9]{{1,{0}}}$", maxDigits));
}
您可以保留最多2位数的默认值,或者您可以指定自己的限制:
bool result = IsHex("AF", 1); // Yields false
答案 2 :(得分:0)
您可以使用正则表达式。
Boolean result = Regex.IsMatch(source, "^[0-9A-F]{1,2}$");
然后您可以从此判断您的字符串是否为十六进制值
答案 3 :(得分:0)
public bool IsTwoDigitsHexNumber(string s) {
return !string.IsNullOrEmpty(s) &&
s.Length <= 2 &&
s.All(c => c >= '0' && c <= '9' || c >= 'A' && c <= 'F');
}
答案 4 :(得分:0)
根据您的具体最终目标,最简单的方法可能是尝试对其进行格式化,并处理异常。
Convert.ToInt32(yourString, 16)
然后只捕获潜在的FormatException,如果
则抛出值包含一个不是基数中有效数字的字符 由fromBase指定。异常消息表明存在 如果值中的第一个字符无效,则不转换数字; 否则,该消息表明该值包含无效的尾随 字符。
有些情况下,这不会涵盖您的可能要求,例如,如果您需要确保十六进制数字中只有两位数字。您可以检查返回的int是否在正确的范围内,但它减少了此方法的整体简单性。不过,我仍然比正则表达更喜欢它。对于大多数人来说,代码也会更容易阅读,因为正如有时看起来,正则表达不那么直观。
虽然这并不考虑区分大小写,但是大多数情况都不会关心这一点,如果最终目标是提供数字,或者将它们传递给第三方,那么只需发送字符串作为大写。