Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用JS检查字符串是否可以生成有效的html ID?_Javascript_Html_Regex_If Statement - Fatal编程技术网

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值的另一个问题。