Javascript 不使用正则表达式验证十六进制颜色
我正在研究如何在不使用regExp的情况下验证十六进制颜色(“1234a6”和“#1cf”)。谁能告诉我为什么我的代码不能正常工作Javascript 不使用正则表达式验证十六进制颜色,javascript,Javascript,我正在研究如何在不使用regExp的情况下验证十六进制颜色(“1234a6”和“#1cf”)。谁能告诉我为什么我的代码不能正常工作 function checkHex(input) { var i, code, len; // If first letter isn't "#" stop executing if(input.charAt(0) !== "#") return false; code = input.charCodeAt(i); f
function checkHex(input)
{
var i, code, len;
// If first letter isn't "#" stop executing
if(input.charAt(0) !== "#") return false;
code = input.charCodeAt(i);
for(i = 1; len = input.length, i < len; i++) {
if(len == 3 || len == 6 ) {
if((code > 47 && code < 58) && (code > 96 && code < 103)) {
return true;
}
}
return false;
}
}
checkHex("#1234a6"); // returns false; which should be true;
函数校验十六进制(输入)
{
变量i,代码,len;
//如果第一个字母不是“#”,则停止执行
if(input.charAt(0)!=“#”)返回false;
代码=输入。charCodeAt(i);
对于(i=1;len=input.length,i47&&代码<58)和((代码>96&&代码<103)){
返回true;
}
}
返回false;
}
}
勾选十六进制(“#1234a6”);//返回false;这应该是真的;
谢谢。无需循环或字符编码
函数校验十六进制(输入){
var检查,代码,len;
如果(typeof input=='string'){//检查它是一个字符串
如果(输入[0]==“#”){//并且它以#
len=输入长度;
//如果(len==4 | | len==7 | | len==5 | | len==9){//5和9表示| RGBA和| RRGGBBAA
如果(len==4 | | len==7){//它是4或7个字符
input=input.toLowerCase();//转换为小写
//将其解析为十六进制,并输出为带有#前缀的十六进制
check='#'+('00000000'+parseInt(input.substr(1),16).toString(16)).substr(1-len);
//检查一下号码是否相同
返回检查===输入;
}
}
}
//所有其他条件都适用于此处
返回false;
}
log(checkHex(#1234a6”);//true
console.log(checkHex(“1234a6”);//false
console.log(checkHex(#1234”);//false
console.log(checkHex(#12345t”);//false
console.log(checkHex(#aBc”);//true
console.log(checkHex(#000”);//true
console.log(checkHex(#00001”);//false
console.log(checkHex(#000001”);//true
不需要循环或charcodeat
函数校验十六进制(输入){
var检查,代码,len;
如果(typeof input=='string'){//检查它是一个字符串
如果(输入[0]==“#”){//并且它以#
len=输入长度;
//如果(len==4 | | len==7 | | len==5 | | len==9){//5和9表示| RGBA和| RRGGBBAA
如果(len==4 | | len==7){//它是4或7个字符
input=input.toLowerCase();//转换为小写
//将其解析为十六进制,并输出为带有#前缀的十六进制
check='#'+('00000000'+parseInt(input.substr(1),16).toString(16)).substr(1-len);
//检查一下号码是否相同
返回检查===输入;
}
}
}
//所有其他条件都适用于此处
返回false;
}
log(checkHex(#1234a6”);//true
console.log(checkHex(“1234a6”);//false
console.log(checkHex(#1234”);//false
console.log(checkHex(#12345t”);//false
console.log(checkHex(#aBc”);//true
console.log(checkHex(#000”);//true
console.log(checkHex(#00001”);//false
log(checkHex(“#000001”);//true
好的,下面是一个简单的代码片段,它可以正确地执行此操作,而不需要循环等
您会注意到,我在其中创建了一个lambda函数来处理s
以#
这是为了允许您扩展概念以处理规范,如rgb(1,2,3)
和rgba(4,5,6,1)
等
isRGB=函数{
如果(类型)!=“字符串”)
返回false;
如果(s[0]=='#')
返回(函数(hextr){
如果(hexStr.length!=3&&hexStr.length!=6)
返回false;
return!isNaN(数字(“0x”+hexStr));
})(s.r(1));
返回false;
}
console.log(isRGB('01a5');
console.log(isRGB(“#0a5”);
log(isRGB(“#0a5029”);
好的,下面是一个简单的代码片段,它可以正确地执行此操作,而无需循环等
您会注意到,我在其中创建了一个lambda函数来处理s
以#
这是为了允许您扩展概念以处理规范,如rgb(1,2,3)
和rgba(4,5,6,1)
等
isRGB=函数{
如果(类型)!=“字符串”)
返回false;
如果(s[0]=='#')
返回(函数(hextr){
如果(hexStr.length!=3&&hexStr.length!=6)
返回false;
return!isNaN(数字(“0x”+hexStr));
})(s.r(1));
返回false;
}
console.log(isRGB('01a5');
console.log(isRGB(“#0a5”);
console.log(isRGB('#0a5029'));
您可以直接将值解析为数字,并对照以10为基数的整数值进行检查:
function checkHex(input) {
/*
1193126 = 0x1234a6
463 = 0x1cf
1166591 = 0x11ccff
*/
if(input.charAt(0) == '#') {
var intNumber = Number(input.replace("#","0x"));
return isNaN(intNumber) ? false : (intNumber == 1193126 || intNumber == 463 || intNumber == 1166591);
} else {
return false;
}
}
您可以直接将该值解析为数字,并对照以10为基数的整数值进行检查:
function checkHex(input) {
/*
1193126 = 0x1234a6
463 = 0x1cf
1166591 = 0x11ccff
*/
if(input.charAt(0) == '#') {
var intNumber = Number(input.replace("#","0x"));
return isNaN(intNumber) ? false : (intNumber == 1193126 || intNumber == 463 || intNumber == 1166591);
} else {
return false;
}
}
为什么
code=input.charCodeAt(i);
在您的循环之外?只使用十六进制格式还是您想要任何CSS颜色值?另外,您是否关心#RGBA和#RRGGBBAA格式?或者更简单地说,用例到底是什么?为什么code=input.charCodeAt(i)
在你的循环之外?只使用十六进制格式还是你想要任何CSS颜色值?另外,你是否关心#RGBA和#RRGGBBAA格式?或者更简单地说,用例到底是什么?OP希望确保它是一个有效的RGB规范,而不仅仅是一个数字。尽管数字
类的使用是正确的(例如与parseInt相比)OP希望确保它是一个有效的RGB规范,而不仅仅是一个数字。虽然number
类的使用是正确的(例如vs.parseInt)。可能在chrome中运行了该死的东西,但它确实可以工作,但是使用isNaN是正确的!可能会运行吗