regex 只允许输入字母、数字和连字符?

pkwftd7m  于 2023-06-25  发布在  其他
关注(0)|答案(3)|浏览(127)

我希望在输入中只接受字母、数字和连字符。在PHP中,我这样做:

if(!preg_match("/^[A-Za-z0-9-]+$/", $input)) {
    echo "Only letters, numbers, and hyphens are allowed.";
}

我如何在vanilla JavaScript中实现同样的事情?如果这在纯JavaScript中是不可能的,我怎么能在jQuery中做到呢?谢谢

hwamh0ep

hwamh0ep1#

摘自Sylvain的回答:jQuery only allow numbers,letters and hyphens
注意:jQuery几乎是vanilla js的 Package 器,可以缩短许多常见的语句,如Document.querySelectorAll(),通常可以安全地假设jQuery可以直接转换为vanilla js(我想不出任何jQuery功能不同的例子)。
你可以做的是选择一个表单中的所有输入(或者你喜欢的任何一个),然后用正则表达式测试它们的值(Sylvain使用了一个正则表达式,它选择了所需字符的逆,所以如果有无效字符,它将是true),如果它有任何禁止的字符,阻止表单提交,并做一些其他事情,要求用户解决这个问题。

document.getElementById("formWhitelistedChars").addEventListener("submit", function(e) {
    // Get all inputs in the form we specifically are looking at, this selector can be
    // changed if this is supposed to be applied to specific inputs
    var inputs = document.querySelectorAll('#formWhitelistedChars input');
    var forbiddenChars = /[^a-z\d\-]/ig;
    
    // check all the inputs we selected
    for(var input of inputs) {
        // Just in case the selector decides to do something weird
        if(!input) continue;
        
        // Check that there aren't any forbidden chars
        if(forbiddenChars.test(input.value)) {
            // This line is just to do something on a failure for Stackoverflow
            // I suggest removing this and doing something different in application
            console.log('input ' + input.name + ' has forbidden chars.');
            
            // Do stuff here

            // Prevent submit even propagation (don't submit)
            e.preventDefault();
            return false;
        }
    }
});
<form id="formWhitelistedChars">
  <input name="1" />
  <input name="2" />
  <button type="submit">Submit</button>
</form>

编辑:将0-9替换为\d,如评论中提到的@ibrahimmahrir
EDIT 2:将输入侦听器更改为表单提交

fnx2tebb

fnx2tebb2#

您可以使用/{criteria}/{flags}启动一个新的正则表达式。你的正则表达式会翻译成这样:

/^[aA-zZ0-9-]+$/g.test(/* value to test here*/)
vbopmzt1

vbopmzt13#

若要在输入中只允许字母、数字和连字符,可以使用正则表达式来验证输入字符串。下面是一个简单的Python示例:

import re

def validate_input(input_str):
    pattern = r'^[a-zA-Z0-9\-]+$'
    if re.match(pattern, input_str):
        return True
    else:
        return False

user_input = input("Enter your input: ")

if validate_input(user_input):
    print("Your input is valid.")
else:
    print("Invalid input. Please use only letters, numbers, and hyphens.")

这段代码定义了一个名为validate_input的函数,它接受一个输入字符串,并使用正则表达式检查它是否与给定的模式匹配。模式^[a-zA-Z 0 -9-]+$只允许字母(大写和小写)、数字和连字符。^和$符号确保整个Paper Wasps字符串从头到尾都匹配。
您可以使用此代码作为8171 program的起点,并根据您的特定需要对其进行修改。如果您还有其他问题,请告诉我!

相关问题