【问题标题】:Clientside validation for regex - allowing whitespace in middle but not beginning and end正则表达式的客户端验证 - 允许中间有空格但不允许开始和结束
【发布时间】:2017-05-02 17:33:52
【问题描述】:

我允许这样的正则表达式使用空格:

javascript:

var re_username = /^[a-zA-Z\040\.\-]+$/;
var is_username = re_username.test($('#chatusername').val());
console.log(is_username);   

...但我想在开头和结尾都禁止它。这有效:

javascript:

var re_username = /^[a-zA-Z]+[a-zA-Z\040\.\-]+[a-zA-Z\.]+$/;

...但我需要输入至少 3 个(

我发现这个允许开头和结尾的空格

javascript:

var re_username = /^\S+(?: \S+)*$/

但它允许所有字符 ... 。如何匹配我的目标正则表达式?我试过这个...但它已经不起作用了..

var re_username = /^\S+([a-zA-Z]\040\S+)*$/; 

【问题讨论】:

    标签: javascript jquery regex validation


    【解决方案1】:

    使用

    var re_username = /^[a-zA-Z.-]+(?:\040+[a-zA-Z.-]+)*$/;
    

    会匹配

    • ^ - 字符串开头
    • [a-zA-Z.-]+ - 1+ 个字母,.-
    • (?:\040+[a-zA-Z.-]+)* - 0+ 个序列
      • \040+ - 1+ 个常规空格
      • [a-zA-Z.-]+ - 1+ 个字母,.-
    • $ - 字符串结束

    请参阅regex demo

    注意:如果您不想允许连续的多个空格,请删除\040 之后的+

    另一种效率较低的方法是通过前瞻:

    var re_username = /^(?!\040|.*\040$)[a-zA-Z\040.-]+$/;
                        ^^^^^^^^^^^^^^^ 
    

    在这里,如果在字符串的开头或字符串末尾 ($) 的任何 0+ 个字符 (.*) 之后发现空格,则 (?!\040|.*\040$) 否定前瞻将导致匹配失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多