我有一个textarea定义为:
<textarea class="lined" rows="30" name="script_text" ng-model="textContent" placeholder="Enter Script Here" style="width:100%"></textarea>
是否可以让文本区域中的每一行仅以某个单词列表开头?
例如,用户只能输入:
THIS (doesnt matter what comes after)
IS (doesnt matter what comes after)
ALLOWED (doesnt matter what comes after)
但如果用户键入:
This is a sentence
next line
and another line
这是不允许的。这可能吗?
答案 0 :(得分:0)
好。这是一个纯粹的Javascript解决方案。在Angular中,您可以使用$ scope.yourmodel.val()等编写它。
我用这个HTML测试了它:
<textarea id="text" class="lined" rows="30" name="script_text" ng-model="textContent" placeholder="Enter Script Here" style="width:100%"></textarea>
我插入了这个值:
document.getElementById('text').value
结果:
“Bla das ist ein Text Nochmal blaa“
首先:我有一个正则表达式来获得每一行。你必须自下而上。零是最后一行,在我的例子中是第一行:
document.getElementById('text').value.match('(.*)(?=(\n.*){1}$)')
结果:
["Bla das ist ein Text", "Bla das ist ein Text", "
Nochmal blaa"]
好:现在你可以写一个for,foreach,你想要的任何循环。 你计算并在正则表达式中使用cnt。如果你得到一个null,你就完成了。 我得到了:
document.getElementById('text').value.match('(.*)(?=(\n.*){2}$)')
null
第二:你用文字分割每一行文字。第一个值是你的话:
document.getElementById('text').value.match('(.*)(?=(\n.*){1}$)')[0].split(' ')[0]
结果:“Bla”
答案 1 :(得分:0)
如果您正在使用Angular。您可以充分利用ng-pattern directive。
你可以试试这个:
<textarea class="lined" rows="30" name="script_text" ng-model="textContent" placeholder="Enter Script Here" style="width:100%" ng pattern="/^(THIS|IS|ALLOWED) .*/"></textarea >
这是fiddle