如果颜色字符串是数字,那么我们可以使用RegExp
来检查它是否是有效的CSS颜色。但如果这是一个词呢?
我有从颜色参数动态生成控件的代码。但是,不是颜色,而是null
,""
或随机单词。有没有办法用Javascript检查颜色名称?
更新:非常感谢您的回答! :)
我的最终版本如下(添加toLowerCase()
支票,因为颜色可以是"Green"
,"Red"
等。)
function isValidColor(strColor) {
var s = new Option().style;
s.color = strColor;
// return 'false' if color wasn't assigned
return s.color == strColor.toLowerCase();
}
答案 0 :(得分:7)
这是一个检查当前浏览器中颜色名称支持的简单函数:
import React, { Component } from "react";
import { connect } from "react-redux";
import { Text, View, TouchableOpacity, StyleSheet,Image ,TextInput,Button} from "react-native";
import Icon from 'react-native-vector-icons';
import { login } from "../Actions/actionCreator";
class LoginScreen extends Component {
static navigationOptions = {
title: "Login"
};
constructor(props){
super(props);
this.state = {
username:'',
password:''
}
}
doLogin(username,password)
{
}
render() {
return (
<View style={styles.rootContainer}>
<Image
style={styles.logo}
source={require('/Users/apple/Desktop/redux-react-navigation-demos-authFlow/src/images/logo.png')}
/>
<Icon
name='user'
color='#000'
size={14}
/>
<TextInput
onChangeText={username => this.setState({ username })}
value={this.state.username}
style={styles.textInput}
placeHolder="Username"
/>
<TextInput
onChangeText={password => this.setState({ password })}
value={this.state.password}
style={styles.textInput}
placeHolder="Password"
/>
<Text style={styles.textGreen}>Forget Your Password</Text>
<Button
onPress={() => {
this.doLogin(this.state.username, this.state.password)
}}
color="#ffffff"
title="Sign In"
>
Sign In
</Button>
</View>
);
}
}
const styles = StyleSheet.create({
rootContainer: {
flex: 1,
backgroundColor: "cyan",
justifyContent: "center",
alignItems: "center"
},
textStyles: {
textAlign: "center",
color: "rgba(0,0,0,0.8)",
fontSize: 16
},
touchableStyles: {
marginTop: 15,
backgroundColor: "black",
paddingHorizontal: 50,
paddingVertical: 10,
borderRadius: 5
},
textGreen: {
textAlign:"center",
fontSize:16,
color:'#7dc4a6'
},
logo: {
width: 587,
height: 112
},
textInput: {
borderColor:'black',
backgroundColor:'#D3D3D3',
width:300,
borderWidth: 1,
borderStyle: 'solid',
fontSize:15,
borderRadius: 25,
}
});
const mapDispatchToProps = {
login
};
const Login = connect(null, mapDispatchToProps)(LoginScreen);
export default Login;
由于无效的CSS属性值不会持久存在,我们可以将尝试的设置值与我们要设置的值进行比较,如果匹配,我们知道颜色/属性是有效的。
请注意,这也会批准十六进制,RGB等。如果您的应用程序出现问题,您可以使用function isColor(strColor){
var s = new Option().style;
s.color = strColor;
return s.color == strColor;
}
// try it out
isColor("red"); // true
isColor("reds"); // false
或两个屏幕显示这些内容。
答案 1 :(得分:1)
这是测试任何CSS属性值的通用解决方案:
function validCssValue(cssProp,val){
if(cssProp == "length") return false;
if(val == "") return true;
var style = new Option().style;
if(style[cssProp] != "") return false;
style[cssProp] = val;
return style[cssProp] !== "";
}
new Option().style
的所有属性在创建时将为空。只有有效值会更新属性,因此无效值会将属性留空。 (长度是样式对象的属性,而不是CSS属性,因此我们需要拒绝尝试对其进行测试。)
答案 2 :(得分:0)
我正在开发一个接受颜色名称或十六进制颜色的应用程序。
dandavis的答案仅适用于颜色名称,但不适用于十六进制颜色。
s.color (when assigning '#ff0000')
中存储的值是RGB代码(在这种情况下为rgb(255, 0, 0)
)。因此,比较s.color == strColor
返回false
。
因此,您需要将dandavis的解决方案与给定的here解决方案结合起来。
可能看起来像这样:
function isColor(strColor){
var s = new Option().style;
s.color = strColor;
var test1 = s.color == strColor;
var test2 = /^#[0-9A-F]{6}$/i.test(strColor);
if(test1 == true || test2 == true){
return true;
} else{
return false;
}
}
答案 3 :(得分:0)
可接受的答案几乎是正确的,但是某些颜色值将在某些浏览器上转换-至少Chrome会转换十六进制RGB值#000000' to
rgb(0,0,0)`。
但是,如果将style.color
设置为无效值,则在检查它时会得到一个空字符串:
const isColor = (strColor) => {
const s = new Option().style;
s.color = strColor;
return s.color !== '';
}
答案 4 :(得分:0)
输入通常与输出不正确。如果检查这些值的长度,则会在CSS2树中得到一个空字符串或一个值
function isColor(string) {
var s = new Option().style;
s.color = string;
return s.color.length > 0;
}
答案 5 :(得分:0)
我需要验证 CSS 颜色和所有其他属性。我发现 this wonderful solution 使用内置的 Web APIs CSS.supports() 方法更短、更健壮。
CSS.supports(propertyName, propertyValue)
CSS.supports('color','red')
//True.
CSS.supports('color', '#007')
//True.
CSS.supports('color', 'random')
//False.
CSS.supports('colours', 'red')
//False.
答案 6 :(得分:-1)
<p class="red"></p>
<p class="yellow"></p>
<p class="white"></p>
$(funtion(){
var obj = $("p");
var ex = $(obj).eq(1);
$("button").click(funtion(){
alert(obj);
});
});
这是否解决了这个问题?