Javascript 如何使用JS检查字符串是否可以生成有效的html ID?
我有一个变量Javascript 如何使用JS检查字符串是否可以生成有效的html ID?,javascript,html,regex,if-statement,Javascript,Html,Regex,If Statement,我有一个变量word,它用各种字符串填充,然后成为新元素的id。我想检查并确保字符串将生成有效的html ID。我在以下内容中遇到了正则表达式:,但我不知道如何将其放入if-else语句中。这就是我所尝试的: if (/[A-Za-z][-A-Za-z0-9_:.]*/.test(word) === false) { return findIt(i); } 我尝试了以下几种解决方案,它们确实有效,但并不完全有效。我相信是因为空白还是引用。我基本上是用完整的随机字符创建一
word
,它用各种字符串填充,然后成为新元素的id。我想检查并确保字符串将生成有效的html ID。我在以下内容中遇到了正则表达式:,但我不知道如何将其放入if-else语句中。这就是我所尝试的:
if (/[A-Za-z][-A-Za-z0-9_:.]*/.test(word) === false)
{
return findIt(i);
}
我尝试了以下几种解决方案,它们确实有效,但并不完全有效。我相信是因为空白还是引用。我基本上是用完整的随机字符创建一个ID,所以我希望正则表达式只允许不带引号和空格的字母数字字符串。下面是两个组合,目前效果不错,但肯定有更好的答案
function isValidId(s) {
return /^[^\s]+$/.test(s);
}
if (isValidId(word)===false){
console.log('bad '+word);
return findIt(i);
}
else if(/^[A-Za-z][-A-Za-z0-9_:.]*$/.test(word) === false)
{
console.log(word+" had junk");
return findIt(i);
}
test()
调用的结果已经足够:
if (/^[A-Za-z][-A-Za-z0-9_:.]*$/.test(word)) {
return findIt(i);
} else {
// Does not match
}
在HTML5中,对ID属性值的唯一限制是它至少包含一个字符,并且不包含任何空格,因此应执行以下操作:
function isValidId(s) {
return /^[^\s]+$/.test(s);
}
我用这个小片段:
function (selector) {
return /^(?:#([\w-]+))$/.exec(selector)[1];
}
如果字符串不是有效的id,它将返回null
,或者它将返回没有散列的id(它将允许您直接执行document.getElementById()
)
来源:。这是一个与HTML4规范相关的老问题,但与HTML5规范无关。在HTML5中,ID更灵活(例如,它们可以以数字开头)。@RobG我尝试过你的方法,但我遇到了引号
“随便什么“
不是一个有效的ID。@mishik我试过你的/我的,但空格是杀手。“what-tever”也无效。我需要的东西,可以采取任何字符组合,说真假。谢谢你的尝试,正则表达式来自OP,这并不是问题的重点。但我添加了“^$”来匹配整个单词。这是HTML5之前的HTML的一个限制,在使用中的浏览器从未严格执行过(例如,不一致的ID值不一定被忽略或视为错误),对验证程序来说非常有趣,但实际用途很少。我如何添加引号(“,”)对于无效的标记,因为我认为这可能会弄乱它?ID中的引号是,它甚至可以是ID中的唯一字符。但是,如果要连接字符串以生成标记,则可能最终导致无效标记。这是关于验证标记而不是ID值的另一个问题。