Javascript 使用正则表达式验证属性名
我想使用点表示法规则(任何字母或数字以及Javascript 使用正则表达式验证属性名,javascript,regex,Javascript,Regex,我想使用点表示法规则(任何字母或数字以及\uu和$只要它不以数字开头)快速检查字符串是否可用作属性名,很明显,如果使用了括号表示法,则所有内容都是有效的 我一直在试图找出一个正则表达式的解决方案,但我对正则表达式的了解并不多。我认为我当前的模式将允许字母、数字、$和\但我不知道如何禁止以数字开头 function validName(str){ // check if str meets the requirements return /^[a-zA-Z0-9$_]+$/.te
\uu
和$
只要它不以数字开头)快速检查字符串是否可用作属性名,很明显,如果使用了括号表示法,则所有内容都是有效的
我一直在试图找出一个正则表达式的解决方案,但我对正则表达式的了解并不多。我认为我当前的模式将允许字母、数字、$
和\
但我不知道如何禁止以数字开头
function validName(str){
// check if str meets the requirements
return /^[a-zA-Z0-9$_]+$/.test(str);
}
validName("newName") // should return TRUE
validName("newName32") // should return TRUE
validName("_newName") // should return TRUE
validName("4newName") // should return FALSE
validName("new Name") // should return FALSE
validName("") // should return FALSE
添加一个消极的前瞻应该足够了
^(?![0-9])[a-zA-Z0-9$_]+$
函数有效名(str){
//检查str是否符合要求
返回/^(?[0-9])[a-zA-Z0-9$\+$/.测试(str);
}
console.log(validName(“newName”)//应返回TRUE
console.log(validName(“newName32”)//应返回TRUE
console.log(validName(“\u newName”)//应返回TRUE
console.log(validName(“4newName”)//应返回FALSE
console.log(validName(“新名称”)//应返回FALSE
console.log(validName(“”)//应该返回FALSE
添加一个负的前瞻应该足够了
^(?![0-9])[a-zA-Z0-9$_]+$
函数有效名(str){
//检查str是否符合要求
返回/^(?[0-9])[a-zA-Z0-9$\+$/.测试(str);
}
console.log(validName(“newName”)//应返回TRUE
console.log(validName(“newName32”)//应返回TRUE
console.log(validName(“\u newName”)//应返回TRUE
console.log(validName(“4newName”)//应返回FALSE
console.log(validName(“新名称”)//应返回FALSE
console.log(validName(“”)//应返回FALSE
您可以将模式的第一个字符设置为相同的字符集,但不包括数字:
^[a-zA-Z$\][a-zA-Z0-9$\]*$
您只需将模式的第一个字符设置为相同的字符集,但不包括数字:
^[a-zA-Z$\][a-zA-Z0-9$\]*$
在解决这样的正则表达式时,我建议使用
这段代码应该会解决您的问题
函数有效名(str){
//检查str是否符合要求
返回/^[^0-9][a-zA-Z0-9$\+$/.测试(str)
}
console.log(validName(“newName”)//TRUE
console.log(validName(“newName32”)//TRUE
console.log(validName(“\u newName”)//TRUE
console.log(validName(“4newName”)//FALSE
console.log(validName(“新名称”)//FALSE
log(validName(“”)//FALSE
当像这样解决正则表达式时,我建议使用
这段代码应该会解决您的问题
函数有效名(str){
//检查str是否符合要求
返回/^[^0-9][a-zA-Z0-9$\+$/.测试(str)
}
console.log(validName(“newName”)//TRUE
console.log(validName(“newName32”)//TRUE
console.log(validName(“\u newName”)//TRUE
console.log(validName(“4newName”)//FALSE
console.log(validName(“新名称”)//FALSE
console.log(validName(“”)//FALSE
因为\w
包含[a-zA-Z0-9]
和\d
包含[0-9]
您可以使用以下正则表达式:
const validName=str=>/^(?!\d)[\w$]+$/.test(str);
console.log(validName(“newName”)//应返回TRUE
console.log(validName(“newName32”)//应返回TRUE
console.log(validName(“\u newName”)//应返回TRUE
console.log(validName(“4newName”)//应返回FALSE
console.log(validName(“新名称”)//应返回FALSE
console.log(validName(“”)//应返回FALSE
,因为\w
包含[a-zA-Z0-9.]
和\d
包含[0-9]
您可以使用以下正则表达式:
const validName=str=>/^(?!\d)[\w$]+$/.test(str);
console.log(validName(“newName”)//应返回TRUE
console.log(validName(“newName32”)//应返回TRUE
console.log(validName(“\u newName”)//应返回TRUE
console.log(validName(“4newName”)//应返回FALSE
console.log(validName(“新名称”)//应返回FALSE
console.log(validName(“”)//应返回FALSE
您可能会找到或有用。您可能会找到或有用。检查不需要LookAround的版本检查不需要LookAround的版本。顺便说一句,这将匹配前面有空格的有效名称(尽管它不在OP的测试用例中)。例如,“newName32”。不使用环视功能的优点是什么?没错,[^0-9]
正在显式地检查OP所说的“不以数字开头”。另一种解释是“可以从其他地方允许的任何字符开始,除了一个数字”,在现代JS中使用lookaround可以像/^[^a-zA-Z$\][a-zA-Z0-9$\]+$/
那样完成;事实上,Chrome72比Chrome72快13%左右,这让我一天都感到震惊,甚至在今天的一些应用程序/语言中,lookarounds也不受支持。这是根据您需要支持的内容而不使用它们的一个原因。另一个原因是可读性。再次强调,如果你和你的团队对nbd很直观,但我发现它们有时很难理解。顺便说一句,这将匹配一个前面有空格的有效名称(尽管OP的测试用例中没有)。例如,“newName32”。不使用环视功能的优点是什么?没错,[^0-9]
正在显式地检查OP所说的“不以数字开头”。另一种解释是“可以从其他地方允许的任何字符开始,除了一个数字”,在现代JS中使用lookaround可以像/^[^a-zA-Z$\][a-zA-Z0-9$\]+$/
那样完成;事实上,Chrome72比Chrome72快13%左右,这让我一天都感到震惊,甚至在今天的一些应用程序/语言中,lookarounds也不受支持。这是根据您需要支持的内容而不使用它们的一个原因。另一个原因是可读性。再一次,nbd,如果它们对你和你的团队来说是直观的,但我发现它们有时很难理解!太好了