无法正则表达式文本区域,但如果它是输入则可以

Posted

技术标签:

【中文标题】无法正则表达式文本区域,但如果它是输入则可以【英文标题】:Cannot regex a textarea, but can if its an input 【发布时间】:2018-11-30 04:23:24 【问题描述】:

我有一个用户输入框,但我需要它是一个输入区域,可以像记事本一样使用,而不仅仅是一行。

我创建了一个文本区域,但是当我尝试对值进行正则表达式时,它不处理它并忽略正则表达式..但是输入处理正则表达式..

为什么会这样?如何正则表达式文本区域的输入?

<div class='container' >

<div class='listtitle' title='Describe Your Items & Give Your Listing as Much Detail As You Can' >Info<br>
<h5>Give Your Listing as Much Detail As You Can.</h5>
</div>

<div id ='infofooter' class='listfooter'>Max Letters: 250</div>

</div><!--container2--->    


<script>


$(document).ready(function () 

      $('#infovalue').keyup(checkinfo);

);

function checkinfo() 


var info = $("#infovalue").val();
var infoReg = /^[a-zA-Z][a-zA-Z0-9-+&%#=?<>()£~_\.*!, ]3,54$/;


    if(!infoReg.test(info))  
        $("#infofooter").text("0-250 Standard Characters Please!"), $( "#infovalue" ).addClass( "errorclass" ), $( "#infovalue" ).removeClass( "noerrorclass");
                      

    if(infoReg.test(info))  
        $("#infofooter").text("info Is Good, Thanks!"), $( "#infovalue" ).addClass( "noerrorclass" ), $( "#infovalue" ).removeClass( "errorclass");
                     

var infoB = document.getElementById('infovalue');

var regex= lots/ of/ bad/ words/ - /edited /for /obvious /reasons/gi;
infoB.text=infoB.text.replace(regex, "****");   

;

//把.text改成.val.value也没用。

</script>

【问题讨论】:

你使用textarea错误&lt;textarea class='textbox' name='info' id='infovalue' cols="50" rows="10" required &gt; &lt;?php echo $sellinginfo; ?&gt; &lt;/textarea&gt;developer.mozilla.org/en-US/docs/Web/html/Element/textarea iv 其他方法都试过了,iv 现在到了沮丧的地步,我无法正则表达式 textare,因为 textarea 不使用值,那么我该如何对其进行正则表达式,iv 试过 $(' #infovalue').text & .value ,以及文本区域中的 $ sellinfo 也作为一个值和其余部分,但我不能正则表达式它是什么原因我不知道 最后一个带有很多坏词的正则表达式只是你为了简化代码而放在那里的东西。因为那不是正则表达式。如果您想匹配正斜杠,则必须转义它们。 F.e. re = /bla\/bla/g 是的...iv在编辑器中得到了正确的方法 如果问题出在正则表达式中,这可以帮助您测试它​​:regex101.com 【参考方案1】:

您的代码有很多问题。比如缺少开/关引号等。 关于您过滤/替换“坏词”的尝试,这根本不是正则表达式语法。

这样试试:

regex= /\b(?:lots|bad|words|edited|for|obvious|reasons)\b/gi;

如果您不希望子字符串匹配,请从模式中删除 \b 单词边界。

如果这是问题所在,我还在下面示例中的第一个正则表达式中添加了/r/n

$(document).ready(function () 
      $('#infovalue').keyup(checkinfo);
);

function checkinfo() 

var info = $("#infovalue").val();
var infoReg = /^[a-zA-Z][a-zA-Z0-9-+&%#=?<>\(\)£~_\\.*!, \r\n]3,54$/;

    if(!infoReg.test(info))  
        $("#infofooter").text("0-250 Standard Characters Please!"), $( "#infovalue" ).addClass( "errorclass" ), $( "#infovalue" ).removeClass( "noerrorclass");
                      

    if(infoReg.test(info)) 
        $("#infofooter").text("info Is Good, Thanks!"), $( "#infovalue" ).addClass( "noerrorclass" ), $( "#infovalue" ).removeClass( "errorclass");
                     

var infoB = document.getElementById('infovalue');

var regex= /\b(?:lots|bad|words|edited|for|obvious|reasons)\b/gi;
infoB.value=infoB.value.replace(regex, "****"); 

;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='container' >

<div class='listtitle' title='Describe Your Items & Give Your Listing as Much Detail As You Can' >Info<br>
<h5>Give Your Listing as Much Detail As You Can.</h5>
</div>
<textarea class='textbox' name='info' id='infovalue' cols="50" rows="10" value="" required >
</input>
<div id ='infofooter' class='listfooter'>Max Letters: 250</div>
</div>

【讨论】:

谢谢。 iv将问题缩小到回车...无论出于何种原因,该变量都是回车,而正则表达式没有回车,因此每次都会抛出错误。所以我想我必须在正则表达式中添加 /r 或 /r/n。 而不是 谢谢。现在工作。这是\r\n【参考方案2】:

不确定这是否是问题所在,但您正在尝试在 value 属性中添加一些内容,我认为这适用于输入,但不适用于 textarea 元素。所以也许这可以解决它:

<textarea class='textbox' name='info' id='infovalue' cols="50" rows="10" required ><?php echo $sellinginfo; ?></textarea>

见:https://***.com/a/6007262/9638388

【讨论】:

同样的事情......所以如果变量不是一个值,我该如何正则表达式它 它只是抛出错误类,而不是 noerror 类 我应该把 /r 放在哪里我的正则表达式 any1 infoReg = /^[a-zA-Z][a-zA-Z0-9-+&%#=?()£ ~_\.*!, /r]3,54$/;不工作 你的意思是 \r 而不是 /r ?

以上是关于无法正则表达式文本区域,但如果它是输入则可以的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 - 创建正确解释数字的输入/文本区域

检测某个单词刚刚输入到文本区域

用于测试非纯空格字符串的正则表达式

无法在 iOS 9 上使用 fastclick 输入文本区域

文本输入与文本区域

正则表达式:允许除某些选定字符之外的所有内容[重复]