求正则表达式,限制允许中英文混合的用户名长度

bcrun 2016-04-10 01:57:00
求正则表达式,限制用户名只能由中文或英文字母组成,关键是长度不超过7个汉字(或14个字母)的长度。也就是1个汉字算2个字母的长度:)
...全文
2181 16 打赏 收藏 举报
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
qq2460857094 2016-11-19
^([a-zA-Z]*|[\u4E00-\u9FA5\uf900-\ufa2d]*)$ 这个正则应该可以满足你了。
  • 打赏
  • 举报
回复
@qq2460857094 关键是限制长度
  • 举报
回复
EnForGrass 2016-11-17
你的这个需求超过了正则的能力
  • 打赏
  • 举报
回复
EnForGrass 2016-11-17
一步到位的正则是不行的,只有分开验证
  • 打赏
  • 举报
回复
Mafia 2016-11-17
引用 11 楼 webyellow 的回复:


function getLength(str) {
    return str.replace(/[^ -~]/g, '').length;
}

function limitMaxLength(str, maxLength) {
    var result = [];
    for (var i = 0; i < maxLength; i++) {
        var char = str[i]
        if (/[^ -~]/.test(char))
            maxLength--;
        result.push(char);
    }
    return result.join('');
}
var maxLength = 11;

function onInput() {
    if (getLength(this.value) > maxLength)
        this.value = limitMaxLength(this.value, maxLength);
}
</script>
<input oninput="onInput.call(this)">

这个可以,我的需求是11个字符,真是日了狗。
function getLength(str) { return str.replace(/[^ -~]/g, 'AA').length; }
  • 打赏
  • 举报
回复
Mafia 2016-11-17


function getLength(str) {
    return str.replace(/[^ -~]/g, '').length;
}

function limitMaxLength(str, maxLength) {
    var result = [];
    for (var i = 0; i < maxLength; i++) {
        var char = str[i]
        if (/[^ -~]/.test(char))
            maxLength--;
        result.push(char);
    }
    return result.join('');
}
var maxLength = 11;

function onInput() {
    if (getLength(this.value) > maxLength)
        this.value = limitMaxLength(this.value, maxLength);
}
</script>
<input oninput="onInput.call(this)">

这个可以,我的需求是11个字符,真是日了狗。
  • 打赏
  • 举报
回复
anncesky 2016-05-25
关键是长度不超过7个汉字(或14个字母)的长度 ---------------- 但是正则不会认为汉字是两个字符,这个单一正则是无法实现的 需要通过程序判断总字符数,要使用可以汉字和英文这容易
  • 打赏
  • 举报
回复
Xanl 2016-05-13

//求正则表达式,限制用户名只能由中文或英文字母组成,关键是长度不超过7个汉字(或14个字母)的长度。也就是1个汉字算2个字母的长度:)
            string input = "aaaaaBBBBBcccc";
            string pattern = "^.+?[^\u4e00-\u9fa5A-Za-z]+.+?$";
            int lenth = Encoding.Default.GetBytes(input).Length;
            int maxCount = 14;
            if (lenth <= maxCount)
            {
                if (Regex.Match(input, pattern).Success)
                {
                    //匹配成功、验证失败
                }
                else
                {
                    //匹配失败、验证成功
                }
            }
            else
            {
                //长度超过限制、验证失败
            }
  • 打赏
  • 举报
回复
第一个正则改下,因为你没要求最少输入要求
@"^[\u4E00-\u9FA5a-zA-Z]+$"//最少要一个输入
  • 打赏
  • 举报
回复
混合中文和英文你怎么算?
  • 打赏
  • 举报
回复
@"^ [\u4E00-\u9FA5a-zA-Z]{7,}$"//保证只能输入中文和英文
Regex.Replace(input, @"[^\x00-\xff]", "aa").Length<=14//保证只能输入7个中文或者14个英文,或者两者混合
//这两个一起验证
  • 打赏
  • 举报
回复
老七快跑 2016-05-13
刚好遇到这个问题,我的方法是

var str = ‘验证字符串’;
var len = 0; 
if (str.match(/[^ -~]/g) == null) { 
	len = str.length; 
 }else{ 
	len = str.length + str.match(/[^ -~]/g).length; 
 } 
return len<=你想限制的长度; 
  • 打赏
  • 举报
回复
秋的红果实 2016-04-11
[\u4e00-\u9fa5]表示汉字的 VS2013测试通过
  • 打赏
  • 举报
回复
秋的红果实 2016-04-11
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="RegularExpressionValidator" ValidationExpression="[a-zA-Z]{1,14}|[\u4e00-\u9fa5]{1,7}"></asp:RegularExpressionValidator> [a-zA-Z]{1,14}|[\u4e00-\u9fa5]{1,7}这里,不论是字母还是汉字,至少匹配一个;若可空的话,就写成{0,14}和{0,7}
  • 打赏
  • 举报
回复
bcrun 2016-04-10
引用 1 楼 shingoscar 的回复:
[\xa1-\xffA-Za-z]{14}
不行,你这个连中文都不认
  • 打赏
  • 举报
回复
Poopaye 2016-04-10
[\xa1-\xffA-Za-z]{14}
  • 打赏
  • 举报
回复
发帖
.NET社区

6.0w+

社区成员

.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • R小R
  • 喵叔哟
加入社区
帖子事件
创建了帖子
2016-04-10 01:57
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。