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,如果它们对你和你的团队来说是直观的,但我发现它们有时很难理解!太好了