2009-09-10 16 views
5

मैं कुछ फ़ील्ड के साथ एक सीएमएस समाचार अनुभाग बना रहा हूं लेकिन इस प्रश्न के लिए विशेष रूप से आवश्यक "शीर्षक" और "यूआरएल संदर्भ" फ़ील्ड हैं। जब कोई उपयोगकर्ता किसी लेख शीर्षक में प्रवेश करता है तो मैं शीर्षक फ़ील्ड से पाठ को प्रतिस्थापित करने के लिए जावास्क्रिप्ट/jQuery चाहता हूं और किसी भी रिक्त स्थान और अजीब वर्णों को डैश (-) के साथ हटाकर "साफ" URL खंड बना सकता हूं।जावास्क्रिप्ट क्लीन यूआरएल रेगेक्स

उदा।

क्रिस 'मजेदार नए लेख (शीर्षक)

क्रिस-मज़ा-new-लेख (यूआरएल संदर्भ)

यहाँ कोड है, लेकिन मैं यह पता लगाने की कैसे कई रिक्त स्थान को बदलने के लिए नहीं कर पा रहे (एक पानी का छींटा) - और विशेष वर्ण

 
$('#title').keyup(function(){ 
    var ref = $(this).val().toLowerCase().replace('\ ','-'); 
    $('#reference').val(ref); 
}); 

इसके अलावा, शीर्षक में की तरह "क्रिस" क्रिस "के साथ" (उद्धरण और अंतरिक्ष) मजेदार नए अनुच्छेद "regex क्रिस" की जगह चाहिए। अनिवार्य रूप से पहचानें कि क्या एक दूसरे के बगल में दो विशेष पात्र हैं और प्रतिस्थापित एक डैश के साथ है। इस "क्रिस - मजेदार-नए लेख" की तरह नहीं।

अग्रिम

उत्तर

10

समीर तलवार का जवाब सही है, सिवाय इसके कि वैश्विक मिलान को इंगित करने के लिए नियमित अभिव्यक्ति के अंत में ध्वज /.../g होना आवश्यक है। /.../g के बिना केवल पहला मैच बदल दिया गया है।

$('#title').keyup(function(){ 
    var ref = $(this).val().toLowerCase().replace(/[^a-z0-9]+/g,'-'); 
    $('#reference').val(ref); 
}); 

(। क्षमा करें, समीर, मैं सिर्फ अपनी प्रतिक्रिया पर टिप्पणी की है | छोड़कर मैं अभी तक काफी प्रतिष्ठा अंक नहीं हैं)

+2

में संशोधन करूंगा यदि आपके पास शुरुआत में और/या शीर्षक के अंत में अवांछित चरित्र है, तो आप पीछे या अग्रणी '-' चरित्र के साथ समाप्त हो जाएंगे। एक अतिरिक्त नियमित अभिव्यक्ति टेक्स्ट प्रतिस्थापन लाइन के साथ निम्न की तरह: 'ref = ref.replace (/ (^ - | - $)/g, '');' किसी भी अग्रणी या पीछे वाले चरित्र को हटा दिया जाएगा बाहर और यूआरएल क्लीनर बनाओ। – Aryo

0

धन्यवाद मुझे लगता है कि आप एक चरित्र वर्ग है कि विशेष वर्ण और अंतरिक्ष तो तुम इतनी तरह चरित्र वर्ग के एक से अधिक निर्दिष्ट कर सकते हैं शामिल हैं:

[specials charaters " "]+ 

और की जगह एक डैश

1

आपको वैश्विक ध्वज - जी - रेगेक्स पर, और गुणकों के लिए कुछ प्रकार के क्वांटिफायर की आवश्यकता है (+ = एक या अधिक मैचों, यहां ठीक लगता है)।

तो जैसे replace(/[' {insert further chars you care about here}]+/g,'-')

+0

:

टोरेज़, यहाँ समारोह के अद्यतन संस्करण है सच है, मैं + – annakata

4

कोशिश कुछ:

function slug(str) { 
    if (!arguments.callee.re) { 
    // store these around so we can reuse em. 
    arguments.callee.re = [/[^a-z0-9]+/ig, /^-+|-+$/g]; 
    // the first RE matches any sequence of characters not a-z or 0-9, 1 or more 
    // characters, and gets replaced with a '-' the other pattern matches '-' 
    // at the beginning or end of a string and gets replaced with '' 
    } 
    return str.toLowerCase() 
    // replace all non alphanum (1 or more at a time) with '-' 
    .replace(arguments.callee.re[0], '-') 
    // replace any starting or trailing dashes with '' 
    .replace(arguments.callee.re[1],''); 
} 

slug("Kris' FUN new Article "); 
// "kris-fun-new-article" 
0

यह कैसे है?

str = str.toLowerCase().replace(/[^a-z0-9]+/, '-'); 

सब कुछ है कि एक पत्र या एक पानी का छींटा के साथ एक संख्या नहीं है की जगह चाहिए, और + मतलब है कि यह एक समय में उनमें से एक से अधिक ले लेंगे।

संबंधित मुद्दे