【问题标题】:javascript check if string contains only alphanumeric characters + other special charactersjavascript检查字符串是否仅包含字母数字字符+其他特殊字符
【发布时间】:2016-06-09 10:28:08
【问题描述】:

我找到了这个函数来检查一个字符串是否只包含字母数字字符:

function test ( value ) {
 if( value.match("^[a-zA-Z0-9]*$")){
   alert('ok');
 }
}
test( 'Somevalue123' );

现在我想改进上述功能以允许其他一些“特殊字符”,例如:

  (empty space)
' (single quote)
- (hyphen)
èàùìòÈÀÒÙÌéáúíóÉÁÚÍÓëäüïöËÄÜÏÖêâûîôÊÂÛÎÔç

还有一些符号,比如:

'_', '&', '.', ',', ':', '(', ')', '[', ']', '/', '+', '=', '?', '#', '@'

所以我尝试更新它并且我能够这样做:

function test ( value, numbers, symbols ) {
 numbers = ( typeof numbers  === 'undefined' ) ? 0 : 1; // default numbers not allowed
 symbols = ( typeof symbols === 'undefined' ) ? 0 : 1; // default symbols not allowed
 value = value.replace(/è|à|ù|ì|ò|È|À|Ò|Ù|Ì|é|á|ú|í|ó|É|Á|Ú|Í|Ó|ë|ä|ü|ï|ö|Ë|Ä|Ü|Ï|Ö|ê|â|û|î|ô|Ê|Â|Û|Î|Ô|ç/g, '' ); // remove allowed characters before check

 // value = value.replace(/...???.../g, '' ); allow white space, single quote and symbols?

 if( numbers == 1 && value.match("^[a-zA-Z0-9 ]*$")){ alert('ok'); } // number allowed
 else if( value.match("^[a-zA-Z ]*$")){ alert('ok'); } // number not allowed
}

不确定如何允许空格、单引号和符号(Regex 或 value.replace() 对我来说是一样的)。

【问题讨论】:

  • 在字符类中添加所有这些字符。
  • 对于空格使用 \s ,符号引号使用 \' ,连字符 \- 以及您可以在字符类中包含的所有其他字符,如@Toto 所说,表示 [ 和 ]。

标签: javascript regex string validation


【解决方案1】:

使用字符类并将所有列入白名单的字符添加到字符类中。 确保连字符 - 被转义,在它前面加上反斜杠 \- 或添加到字符类的开头或结尾。

/^[a-zA-Z0-9 èàùìòÈÀÒÙÌéáúíóÉÁÚÍÓëäüïöËÄÜÏÖêâûîôÊÂÛÎÔç'-]*$/

另外,使用RegExp#test 代替String#match

function test(value) {
    if (/^[a-zA-Z0-9 èàùìòÈÀÒÙÌéáúíóÉÁÚÍÓëäüïöËÄÜÏÖêâûîôÊÂÛÎÔç'-]*$/.test(value)) {
        alert('Ok');
    }
}

【讨论】:

    【解决方案2】:

    你可以试试这样的:

    /^[a-z0-9-\'_\.,:\(\)&\[\]\/+=\?#@ \xC0-\xFF]+$/i
    

    逻辑

    • /a-z0-9/i 将处理字母数字字符
    • \xC0-\xFF 会处理外来字符
    • 对于符号,您可以单独列出它们。

    替代方法可能会列出所有不允许的字符并使用否定正则表达式,例如

    /^[^!~`\>\<]$/gi
    

    【讨论】:

    • 谢谢!如何在您的第一个正则表达式中也允许感叹号?
    • 我就是这么说的。您允许大多数字符。所以你可以有一个否定的正则表达式。如果没有,只需将其添加到符号列表中即可。
    猜你喜欢
    • 2016-08-01
    • 2010-12-20
    • 2016-08-24
    • 1970-01-01
    • 2012-02-06
    • 2014-06-21
    • 2014-07-16
    • 2018-08-27
    • 1970-01-01
    相关资源
    最近更新 更多